私は立ち往生しました..そして、これらの答えは私を完全には助けませんでした...彼らは私をそこに導きましたが。他の人の時間を節約するために:
次のように 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);
}
}