簡體   English   中英

使用 VersionByNamespaceConvention 時,如何讓 Swashbuckle 在 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;
        });

您需要使用services.AddVersionedApiExplorer並設置options.SubstituteApiVersionInUrl=true來告訴 swagger 替換控制器路由中的版本並配置 api 版本:

services.AddVersionedApiExplorer(o =>
{
      o.GroupNameFormat = "'v'VVV";
      o.SubstituteApiVersionInUrl = true;
});

結果: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM