Swashbuckle 5 non riesce a trovare i miei ApiController

Swashbuckle 5 non riesce a trovare i miei ApiController

Mi sono bloccato.. e queste risposte non mi hanno aiutato del tutto... anche se mi hanno portato lì. Solo per far risparmiare tempo ad altre persone:

Devi passare la configurazione http da OWIN e quindi registrarti su quella invece di usare la classe GlobalConfiguration in questo modo:

//starup.cs
public void Configuration(IAppBuilder app)
    {
        Config = new HttpConfiguration();
        WebApiConfig.Register(Config);

        app
            .UseResponseLogging()
            .UseRequestLogging()
            .UseHttpErrors()
            .UseExceptionLogging()
            .UseWebApi(Config);

        HandlerConfig.Register(Config);

        SwaggerConfig.Register(Config);
    }

e nel file di configurazione swagger, cambia il metodo di registrazione in:

public static void Register(HttpConfiguration config)
    {
        var thisAssembly = typeof(SwaggerConfig).Assembly;

        config
            .EnableSwagger(c =>
                {...

Spero che questo aiuti.


Ho trovato il problema. Dopo aver creato un progetto di test vuoto, ho notato che WebApiConfiguration veniva registrato dall'avvio dell'app global.asax e non dalla classe di avvio OWIN (come ho fatto io).

Poiché Swagger/Swashbuckle si sta agganciando a GlobalConfiguration e anche dato che l'avvio di OWIN e Global.asax vivono in contesti diversi (credo), la soluzione è collegare il materiale WebAPI per la registrazione da Global.asax e per utilizzare l'oggetto dell'app di OWIN API Web.

Bit rilevanti:

   // global asax
    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
       // ... more stuff
    }

   //startup.cs
   public void Configuration(IAppBuilder app)
    {
        // This must happen FIRST otherwise CORS will not work.
        app.UseCors(CorsOptions.AllowAll);

        HttpConfiguration config = new HttpConfiguration();

        ConfigureAuth(app);

        // webapi is registered in the global.asax
        app.UseWebApi(config);

    }

Dopo aver ricablato come sopra, ora posso vedere i controller e le azioni nell'interfaccia utente spavalda.


Ho scoperto di avere lo stesso problema. Ho creato un metodo di estensione per aiutarti

using Swashbuckle.Application;
using System.Web.Http;

public static class SwaggerExtensions
{
    public static HttpConfiguration EnableSwagger(this HttpConfiguration httpConfiguration)
    {
        httpConfiguration
            .EnableSwagger(c => c.SingleApiVersion("v1", "A title for your API"))
            .EnableSwaggerUi();
        return httpConfiguration;
    }
}

Quindi nel mio Startup.cs

public class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
        HttpConfiguration httpConfiguration = new HttpConfiguration();

        httpConfiguration
            .EnableSwagger()    // <==== EXTENSION METHOD <==== //
            .MapHttpAttributeRoutes();

        httpConfiguration.Routes.MapHttpRoute(
            "DefaultApi",
            "api/{controller}/{id}",
            new {id = RouteParameter.Optional});

        appBuilder
            .UseWebApi(httpConfiguration);
    }
}