[英]make AuthorizationUrl configurable in swagger ui using Swashbuckle 6.0.5 in asp.net core 3.1
[英]How do I get Swashbuckle to work in Asp.net Core 3.1 when using VersionByNamespaceConvention?
我正在使用 VersionByNamespaceConvention。 在 ConfigureServices 的 Startup.cs 中,我添加了:
services.AddApiVersioning(options =>
{
options.Conventions.Add(new VersionByNamespaceConvention());
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API", Version = "v2" });
});
並在配置
app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.SwaggerEndpoint("/swagger/v2/swagger.json", "My API V2");
});
在項目的根目錄中,我有文件夾 v1 和 v2,在這些文件夾下我有一個 Controllers 文件夾。 控制器的代碼(v2 與 v1 相同,除了命名空間和返回值)。
namespace WebApitest.v1.Controllers
{
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public string Get()
{
return "v1";
}
}
}
api 本身運行良好,但 Swagger 渲染未按預期工作。
打開https://localhost:44307/swagger/index.html 時,它會在右上角顯示一個下拉列表,顯示“My API V1”和“My API V2”,但屏幕中間顯示
獲取錯誤 - 未定義 /swagger/v1/swagger.json
如果我只有 v1 版本的控制器,這會起作用。 但隨后它顯示的版本號如下圖所示,即使此處的版本號已被選中。
解決方案
我添加了 nuget 包 Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer v4.x 並將以下代碼添加到 ConfigureServices,現在它按預期工作。
services.AddVersionedApiExplorer(o =>
{
o.GroupNameFormat = "'v'VVV";
o.SubstituteApiVersionInUrl = true;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.