我有一个使用 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 .)