我有一个API,我在.NetCore 3.1中创建了一个API,并使用Swashbuckle启用了Swagger(OAS3)。默认情况下,当我的应用程序启动时,如果使用以下URL打开Swagger页面:
http://{port}/swagger.index.html
我想定制Swagger,以便它包含正在运行的应用程序的名称。我之所以这样做,是因为我使用基于路径的路由,Nginx在AWS Fargate中运行。
我将在Fargate任务中运行几个API容器,Nginx将接收来自和来自路径(例如/api/app1)的其余请求,它将将请求路由到目标应用程序的正确容器端口。
例如,我有三个应用程序:端口5000上的App1、端口5001上的App2和端口5003上的App3。
如果用户向https://api/app1发出请求,Nginx将检测路径并将请求转发到端口5000,端口5000是app1的容器端口。
但是,为了确保出现正确的Swagger页面,我需要将"api/App1“添加到Swagger的URL中,以便Nginx将请求转发到正确的容器。在这种情况下,它是App1。
换句话说,我希望自己的Swagger URL看起来像这样:
https://api/app1/swagger/index.html
我试过什么
在我的Startup.cs文件中,我添加了以下内容:
// Define prefix for application
private readonly string baseApplicationRoute = "api/app1";
// Enable OAS3 JSON middleware
app.UseSwagger(c =>
{
c.RouteTemplate = baseApplicationRoute+"/{documentName}/swagger.json";
});
app.UseSwaggerUI(c =>
{
var endpoint = $"/{baseApplicationRoute}/{version.ToLower()}/swagger.json";
c.SwaggerEndpoint(endpoint, $"APP1 API - {version}");
c.RoutePrefix = string.Empty;
});
它编译并工作,但是它仍然使用相同的Swagger URL:
http://{port}swagger.index.html
我认为这只是改变了swagger.json的位置,因为在出现的Swagger上,它显示了:
/api/app1/v1/swagger.json
我的launchSettings.json文件将"launchUrl“指定为"swagger”。
我想我已经接近了,但显然我错过了什么。综上所述,我只是想改变一下:
默认Swagger URL
http://{port}swagger.index.html
在这里我的习俗是:
http://{port}/api/app1/v1/swagger.index.html
这样,Nginx就可以检测到"/api/app1“并将其路由到正确的容器。
我遗漏了什么?
发布于 2020-06-15 05:06:05
我找到了解决这个问题的办法:
在的Startup.cs部分中,我完成了以下操作:
首先,我添加了折叠变量:
private readonly string swaggerBasePath = "api/app";
接下来,我使用swaggerBasePath变量使用UseSwagger和UseSwaggerUI配置了路径:
app.UseSwagger(c =>
{
c.RouteTemplate = swaggerBasePath+"/swagger/{documentName}/swagger.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint($"/{swaggerBasePath}/swagger/v1/swagger.json", $"APP API - {version}");
c.RoutePrefix = $"{swaggerBasePath}/swagger";
});
最后,我修改了launchSettings.json以指向新的基本路径:
"launchUrl": "api/app/swagger",
然后就可以使用以下方法点击Swagger页面:
https://localhost/api/app/swagger/index.html
我用Nginx进行了测试,它能够路由到正确的容器。
通过简单地修改swaggerBasePath变量并调整launchSettings.json文件以匹配变量的值,我可以轻松地调整基本路径(例如,添加API版本号)。
希望这能对未来的人有所帮助。
发布于 2022-06-28 08:31:35
(我使用的是.Net 6)
我需要这样做,因为我在api网关中面临问题。所以,我做了什么,我离开了我的发射设置的原样。
launchsettings
"launchUrl": "studentservice/api/swagger",
我在我的Startup.cs
文件.中做了这两项更改
注意:您的启动设置url和route前缀url应该匹配。
ConfigureService Method
,我添加了SwaggerDocservices.AddSwaggerGen(c =>
{
c.SwaggerDoc("student", new OpenApiInfo { Title = "Student Service Api", Version = "1.0" });
}
Configure Method
,我添加了SwaggerDoc app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.)
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/student/swagger.json", "Student Services Api");
c.RoutePrefix = "studentservice/api/swagger";
});
}
https://stackoverflow.com/questions/62376063
复制相似问题