首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改Swagger默认URL并使用自定义URL?

如何更改Swagger默认URL并使用自定义URL?
EN

Stack Overflow用户
提问于 2020-06-14 17:34:54
回答 2查看 34.6K关注 0票数 11

我有一个API,我在.NetCore 3.1中创建了一个API,并使用Swashbuckle启用了Swagger(OAS3)。默认情况下,当我的应用程序启动时,如果使用以下URL打开Swagger页面:

代码语言:javascript
运行
复制
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看起来像这样:

代码语言:javascript
运行
复制
https://api/app1/swagger/index.html

我试过什么

在我的Startup.cs文件中,我添加了以下内容:

代码语言:javascript
运行
复制
// 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:

代码语言:javascript
运行
复制
http://{port}swagger.index.html

我认为这只是改变了swagger.json的位置,因为在出现的Swagger上,它显示了:

代码语言:javascript
运行
复制
/api/app1/v1/swagger.json

我的launchSettings.json文件将"launchUrl“指定为"swagger”。

我想我已经接近了,但显然我错过了什么。综上所述,我只是想改变一下:

默认Swagger URL

代码语言:javascript
运行
复制
http://{port}swagger.index.html

在这里我的习俗是:

代码语言:javascript
运行
复制
http://{port}/api/app1/v1/swagger.index.html

这样,Nginx就可以检测到"/api/app1“并将其路由到正确的容器。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-15 05:06:05

我找到了解决这个问题的办法:

在的Startup.cs部分中,我完成了以下操作:

首先,我添加了折叠变量:

代码语言:javascript
运行
复制
private readonly string swaggerBasePath = "api/app";

接下来,我使用swaggerBasePath变量使用UseSwaggerUseSwaggerUI配置了路径:

代码语言:javascript
运行
复制
            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以指向新的基本路径:

代码语言:javascript
运行
复制
    "launchUrl": "api/app/swagger",

然后就可以使用以下方法点击Swagger页面:

代码语言:javascript
运行
复制
https://localhost/api/app/swagger/index.html

我用Nginx进行了测试,它能够路由到正确的容器。

通过简单地修改swaggerBasePath变量并调整launchSettings.json文件以匹配变量的值,我可以轻松地调整基本路径(例如,添加API版本号)。

希望这能对未来的人有所帮助。

票数 19
EN

Stack Overflow用户

发布于 2022-06-28 08:31:35

(我使用的是.Net 6)

我需要这样做,因为我在api网关中面临问题。所以,我做了什么,我离开了我的发射设置的原样。

launchsettings

代码语言:javascript
运行
复制
"launchUrl": "studentservice/api/swagger",

我在我的Startup.cs 文件.中做了这两项更改

注意:您的启动设置url和route前缀url应该匹配。

  • In ConfigureService Method,我添加了SwaggerDoc

代码语言:javascript
运行
复制
services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("student", new OpenApiInfo { Title = "Student Service Api", Version = "1.0" });
}

  • In Configure Method,我添加了SwaggerDoc

代码语言:javascript
运行
复制
                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";
                });
}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62376063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档