Swashbuckle 5 kann meine ApiController nicht finden

Swashbuckle 5 kann meine ApiController nicht finden

Ich bin stecken geblieben ... und diese Antworten haben mir nicht vollständig geholfen ... obwohl sie mich dorthin geführt haben. Nur um anderen Zeit zu sparen:

Sie müssen die http-Konfiguration von OWIN übergeben und sich dann dort registrieren, anstatt die GlobalConfiguration-Klasse wie folgt zu verwenden:

//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);
    }

und ändern Sie in der Swagger-Konfigurationsdatei die Registrierungsmethode in:

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

        config
            .EnableSwagger(c =>
                {...

Hoffe das hilft.


Ich habe das Problem gefunden. Nachdem ich ein leeres Testprojekt erstellt hatte, bemerkte ich, dass die WebApiConfiguration vom App-Start global.asax registriert wurde und nicht von der OWIN-Startup-Klasse (wie ich es tat).

Da Swagger/Swashbuckle sich in die GlobalConfiguration einklinkt und auch OWIN startup und Global.asax in unterschiedlichen Kontexten leben (glaube ich), besteht die Lösung darin, Ihr WebAPI-Zeug so zu verkabeln, dass es sich von Global.asax aus registriert und das App-Objekt von OWIN verwendet WebAPI.

Relevante Bits:

   // 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);

    }

Nach der Neuverkabelung wie oben kann ich jetzt Controller und Aktionen in der Swagger-Benutzeroberfläche sehen.


Ich habe festgestellt, dass ich das gleiche Problem hatte. Ich habe eine Erweiterungsmethode erstellt, um zu helfen

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;
    }
}

Dann in meiner 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);
    }
}