次を使用してswaggerを使用しているASP.NET Core Webアプリケーションがあります。
_public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSwaggerGen(c =>
{
c.OperationFilter<ExamplesOperationFilter>();
c.OperationFilter<DescriptionOperationFilter>();
c.SwaggerDoc("v1", new Info
{
Version = "v1",
Title = "API",
Description = "",
});
// Set the comments path for the Swagger JSON and UI.
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API"); });
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
_
Url/swaggerに移動すると、次のエラーが表示されます。
失敗:Microsoft.AspNetCore.Server.Kestrel [13]接続ID "0HLG1T7PRT05H"、要求ID:未処理の例外がアプリケーションによってスローされました。 System.TypeLoadException:タイプ 'Swashbuckle.AspNetCore.SwaggerGen.SwaggerResponseAttribute'をアセンブリ 'Swashbuckle.AspNetCore.SwaggerGen、Version = 3.0.0.0、Culture = neutral'.at Swashbuckle.AspNetCore.Examples.DescriptionOperationFilter.SetResponseModelDescriptions(Operation操作からロードできませんでした、ISchemaRegistry schemaRegistry、ApiDescription apiDescription)、Swashbuckle.AspNetCore.Examples.DescriptionOperationFilter.Apply(操作操作、OperationFilterContextコンテキスト)Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreateOperation(ApiDescription apiDescription、ISchemaRegistry schemaRegistry schemaRegistry schemaRegistry) CreatePathItem(IEnumerable
1 apiDescriptions, ISchemaRegistry schemaRegistry) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable
1 source、Func _2 keySelector, Func
_ 2 elementSelector、IEqualityComparer1 comparer) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItems(IEnumerable
1 apiDescriptions、ISchemaRegistry schemaRegistry)Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName、String Host、StringホストbasePath、String []スキーム)at Swashbuckle.AspNetCore.Swagger .SwaggerMiddleware.Invoke(HttpContext httpContext)at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [TContext](IHttpApplication`1 application)
私がインストールしたnugetパッケージは次のとおりです。
Swashbuckle.AspNetCore v3.0.0
Swashbuckle.AspNetCore.Examples v2.9.0
Swashbuckle.AspNetCoreをv2.5.0にロールバックするとうまくいきました
パッケージのアンインストール
Swashbuckle.AspNetCore.Examples
問題を修正する必要があります。新しいパッケージは(まだ試していません)-
Swashbuckle.AspNetCore.Filters
(UPDATE)新しいパッケージは完全に正常に動作します
これは、.netcore 3.0にアップグレードするときに機能しました。
1)Install-Package Swashbuckle.AspNetCore-バージョン5.0.0-rc4
2)コードを変更
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI", Version = "v1" });
});
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,ILoggerFactory loggerFactory)
{
...
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "swagger/ui";
c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI(v1)");
});
...
}
基本的に、 https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases/tag/v5.0.0-rc4 にある次のサンプル
これは、バージョン3のいくつかの重大な変更に関連していました。 ここで詳細を確認できます。
これを修正するには、 Swashbuckle.AspNetCore.Annotationsパッケージ。 を追加してみてください。
Install-Package Swashbuckle.AspNetCore.Annotations -Version 3.0.0
ドットネットコアの場合:
dotnet add package Swashbuckle.AspNetCore.Annotations --version 3.0.0
それ以降のバージョンとASPNET Coreで動作させるには、以下を行う必要があります。
AddSwaggerGen
call ExampleFilters();
内(ConfigureServices内)IExampleProvider<TargetDtoType>
に基づいてサンプルクラスを実装します。ここで、TargetDtoType
はサンプルのターゲットタイプです。AddSwaggerExamplesFromAssemblyOf<ExampleTypeImplementation>
ここで、ExampleTypeImplementationはIExampleProvider<TargetDtoType>
を実装するステップ3のタイプですこれは私のためにトリックをしました。アクションメソッドの属性は必要ありません。スワッシュバックルはパラメータータイプを介して取得し、サンプルを自動的に生成します