C# Swagger未使用apiexplorer为Swagger.json生成版本2
我正在使用api资源管理器将版本控制添加到我的.NET5WebAPI项目中,v1显示得很好,没有问题,但版本2不会显示在不同的控件中,而不是相同的名称或方法。我在这里使用.NET5C# Swagger未使用apiexplorer为Swagger.json生成版本2,c#,asp.net-core,C#,Asp.net Core,我正在使用api资源管理器将版本控制添加到我的.NET5WebAPI项目中,v1显示得很好,没有问题,但版本2不会显示在不同的控件中,而不是相同的名称或方法。我在这里使用.NET5 services.AddSwaggerGen(options => { using (var serviceProvider = services.BuildServiceProvider()) { var provider = serviceProvid
services.AddSwaggerGen(options =>
{
using (var serviceProvider = services.BuildServiceProvider())
{
var provider = serviceProvider.GetRequiredService<IApiVersionDescriptionProvider>();
String assemblyDescription = typeof(Startup).Assembly.GetCustomAttribute<AssemblyDescriptionAttribute>().Description;
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerDoc(description.GroupName, new Microsoft.OpenApi.Models.OpenApiInfo()
{
Title = $"{typeof(Startup).Assembly.GetCustomAttribute<AssemblyProductAttribute>().Product} {description.ApiVersion}",
Version = description.ApiVersion.ToString() ,
Description = description.IsDeprecated ? $"{assemblyDescription} - DEPRECATED" : $"{assemblyDescription}"
});
}
}
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description =
"JWT Authorization header using the Bearer scheme. \r\n\r\n Enter 'Bearer' [space] and then your token in the text input below.\r\n\r\nExample: \"Bearer 12345abcdef\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer"
});
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
},
Scheme = "oauth2",
Name = "Bearer",
In = ParameterLocation.Header
},
new List<string>()
}
});
var currentAssembly = Assembly.GetExecutingAssembly();
var xmlDocs = currentAssembly.GetReferencedAssemblies()
.Union(new AssemblyName[] { currentAssembly.GetName() })
.Select(a => Path.Combine(Path.GetDirectoryName(currentAssembly.Location), $"{a.Name}.xml"))
.Where(f => File.Exists(f)).ToArray();
Array.ForEach(xmlDocs, (d) =>
{
options.IncludeXmlComments(d);
});
options.DocumentFilter<RemoveDefaultApiVersionRouteDocumentFilter>();
options.OperationFilter<RemoveQueryApiVersionParamOperationFilter>();
当swagger报告错误时,您可以查看
输出
窗口中抛出的详细异常。原因应该说得相当清楚。正如我所说的,我已经解决了这个问题,事实上我使用了json文件的url并发现了我的问题
app.UseSwagger();
var provider = app.ApplicationServices.GetService<IApiVersionDescriptionProvider>();
app.UseSwaggerUI(
options =>
{
options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);
// build a swagger endpoint for each discovered API version
foreach (var description in provider.ApiVersionDescriptions)
options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
});
options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.List);