用于 Swagger 文档的 UsePathBase 和 Swashbuckle
UsePathBase and Swashbuckle for Swagger Documentation
我已经使用中间件 UsePathBase("/api/something/else")
设置了我的 ASP.NET 核心,我的控制器定义如下:
[ApiController]
[Route("/[controller]")]
public class WeatherForecastController : ControllerBase
具体端点是这样定义的
[HttpGet]
public async Task<IEnumerable<ForecastRecord>> Get()
当我 运行 应用程序时,我可以像这样访问端点:
/WeatherForecast
/api/something/else/WeatherForecast
当我得到 Swagger 文档时,我得到了这个:
"servers": [
{
"url": "/api/something/else"
}
],
"paths": {
"/WeatherForecast": {
"get": {
"tags": [
"WeatherForecast"
],
如您所见,servers
元素有一个 /api/something/else
条目,但是当我 运行 SwaggerUI 时,我没有看到前缀为 /api/something/else
的端点:
我想知道是否有办法强制 SwaggerUI 为端点添加前缀 UsePathBase
在这里和那里玩中间件调用的顺序后,我找到了解决这个问题中描述的问题的正确组合是:
//1. Add SwaggerUI
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "api/something/else";
c.SwaggerEndpoint("swagger/v1/swagger.json", "Name");
});
//2. Set BasePath
app.UsePathBase("/api/something/else");
//3. Add Swagger
app.UseSwagger();
按照该命令,Swagger UI 将正确显示端点:
我已经使用中间件 UsePathBase("/api/something/else")
设置了我的 ASP.NET 核心,我的控制器定义如下:
[ApiController]
[Route("/[controller]")]
public class WeatherForecastController : ControllerBase
具体端点是这样定义的
[HttpGet]
public async Task<IEnumerable<ForecastRecord>> Get()
当我 运行 应用程序时,我可以像这样访问端点:
/WeatherForecast
/api/something/else/WeatherForecast
当我得到 Swagger 文档时,我得到了这个:
"servers": [
{
"url": "/api/something/else"
}
],
"paths": {
"/WeatherForecast": {
"get": {
"tags": [
"WeatherForecast"
],
如您所见,servers
元素有一个 /api/something/else
条目,但是当我 运行 SwaggerUI 时,我没有看到前缀为 /api/something/else
的端点:
我想知道是否有办法强制 SwaggerUI 为端点添加前缀 UsePathBase
在这里和那里玩中间件调用的顺序后,我找到了解决这个问题中描述的问题的正确组合是:
//1. Add SwaggerUI
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "api/something/else";
c.SwaggerEndpoint("swagger/v1/swagger.json", "Name");
});
//2. Set BasePath
app.UsePathBase("/api/something/else");
//3. Add Swagger
app.UseSwagger();
按照该命令,Swagger UI 将正确显示端点: