dotnet core 在 subdir 下更改 swagger.json 服务器 url 错误

时间:2021-02-15 12:32:52

标签: asp.net-core swagger swagger-ui swashbuckle.aspnetcore

我有一个使用 swagger 设置的 dotnet 核心 webapi 项目。

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddSwaggerGen();
    ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("./v1/swagger.json", "myapi.Api V1");
    });
}

控制器是这样的:

[Route("api/[controller]/[action]")]
[ApiController]
[Authorize(Policy = "policyname")]
public class ThingController : ControllerBase
{
    [HttpGet]
    public async Task<ActionResult> GetThing()
    {
        ....
    }
}

这在本地工作正常,一旦部署到服务器并直接访问(例如 https://myservername/myapi/swagger/index.html 可以正确地对 https://myservername/myapi/api/thing 进行 api 调用)< /p>

但是我们有一个别名设置可以通过 https://myapp.company.com/services/myapi 访问。

现在进行直接 api 调用有效,例如 https://myapp.company.com/services/myapi/api/thing 返回与 https://myservername/myapi/api/thing 相同的返回值

Swagger UI 在 https://myapp.company.com/services/myapi/swagger/index.html 处正确显示并且它正确加载了 swagger.json 但所有 api 调用都是作为 https://myapp.company.com/myapi/api/thing 进行的,即 api 基本 url 中缺少 /services,不用说这些 api调用失败。

Swagger.json 包含以下内容:

 "servers": [
    {
      "url": "/myapi"
    }
  ],

我认为这应该是/services/myapi,其余的应该就位。我该如何设置?

我做了一些谷歌搜索,发现了很多问题,询问如何将 swagger ui 移动到新位置(UseSwaggerUI(c => c.RoutePrefix) 和一些关于如何将 swagger.json 移动到新位置(app. UseSwagger(c => c.RouteTemplate) 但它们都不是我想要的。

如何在运行时配置 swagger 的服务器 url?最好使用本地路径,以便它适用于所有环境(例如,它“只知道”其位于 https://myservername/myapi/、https://myapp.company.com/services/myapi/ 甚至 https://localhost:5001/ 并根据需要设置基本 url .)

0 个答案:

没有答案
相关问题