Swashbuckle 5 が ApiControllers を見つけられない

私は立ち往生しました..そして、これらの答えは私を完全には助けませんでした...彼らは私をそこに導きましたが。他の人の時間を節約するために:

次のように GlobalConfiguration クラスを使用する代わりに、OWIN から http 構成を渡してから登録する必要があります。

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

そして、swagger 構成ファイルで、register メソッドを次のように変更します。

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

        config
            .EnableSwagger(c =>
                {...

これがお役に立てば幸いです。


問題が見つかりました。空のテスト プロジェクトを作成した後、OWIN スタートアップ クラスではなく、global.asax アプリの開始から WebApiConfiguration が登録されていることに気付きました (私が行ったように)。

Swagger/Swashbuckle は GlobalConfiguration にフックされており、OWIN のスタートアップと Global.asax が異なるコンテキストに存在することを考えると (私が思うに)、WebAPI を接続して Global.asax から登録し、OWIN のアプリ オブジェクトを使用するようにすることで修正できます。 WebAPI.

関連ビット:

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

    }

上記のように再配線した後、swagger UI でコントローラーとアクションを確認できるようになりました。


同じ問題があることがわかりました。役立つ拡張メソッドを作成しました

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

次に、私の 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);
    }
}