Swagger:在Swagger UI中更改api路由

Swagger:在Swagger UI中更改api路由,swagger,asp.net-core-2.0,azure-aks,Swagger,Asp.net Core 2.0,Azure Aks,我在AKS上部署了两个kubernetes服务,它们接收来自Nginx入口控制器的流量。这两个服务的端点是https:/service1和https:/service2。现在我想为每个服务设置Swagger。下面是我如何为其中一个服务设置Swagger UI的 app.UseSwaggerUI(c => { c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");

我在AKS上部署了两个kubernetes服务,它们接收来自Nginx入口控制器的流量。这两个服务的端点是
https:/service1
https:/service2
。现在我想为每个服务设置Swagger。下面是我如何为其中一个服务设置Swagger UI的

app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
        });
通过此配置,我可以通过
https:/service1/swagger
访问swagger


现在的问题是,在Swagger UI中,当我想通过单击“试用”按钮然后执行按钮来测试api时,Swagger UI访问的url是
https:/api/v1/contoller
,而不是
https:/service1/api/v1/contoller
。这意味着Swagger UI不知道路径
/service1/
的存在。我发现了几个与此相关的问题。但它们不是解决我问题的办法。我想我需要为大摇大摆设定一条基本路线。如果有人能告诉我如何在ASP.NET core 2.0中为Swagger配置基本路径,我将不胜感激。

基于,也许你可以尝试在你的入口规则中设置X-forwarded-prefix,如请在
public void中配置(IApplicationBuilder应用程序,IHostingEnvironment环境,ILoggerFactory)
{

在此之后使用:

app.UseSwaggerUI(c=>
              {
                   c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "Giftaway API V1");
此选项

c.RoutePrefix = "service1";

这将使您在入口中获得https:/service1/api/v1/controller

不要使用此注释

nginx.ingres.kubernetes.io/rewrite-target://

更改此选项:

app.UseSwagger();
app.UseSwaggerUI(c=>
{
c、 SwaggerEndpoint(“/service1/swagger/v1/swagger.json”,“API v1”);
});
为此:

适用于dotnet core 2.x

app.UseSwagger(c=>
{
#如果!调试
c、 PreSerializeFilters.Add((swaggerDoc,httpReq)=>swaggerDoc.BasePath=“/service1”);
#恩迪夫
});
app.UseSwaggerUI(c=>
{
c、 SwaggerEndpoint(“./swagger/v1/swagger.json”,“API v1”);
});
适用于dotnet core 3.x(Swashback 5.x预发行版+)

app.UseSwagger(c=>
{
#如果!调试
c、 RouteTemplate=“swagger/{documentName}/swagger.json”;
c、 PreSerializeFilters.Add((swaggerDoc,httpReq)=>swaggerDoc.Servers=new System.Collections.Generic.List
{
新OpenApiServer{Url=$“{httpReq.Scheme}://{httpReq.Host.Value}/service1}
});
#恩迪夫
});
app.UseSwaggerUI(c=>
{
c、 SwaggerEndpoint(“./swagger/v1/swagger.json”,“API v1”);
});
#if!DEBUG#endif是在本地计算机中调试时访问Swigger ui所必需的

注意:我假设“/service1”的值与掌舵图的values.yaml文件中的值相同。(见下文)

。。。
进入:
已启用:true
注释:{
kubernetes.io/ingres.class:“nginx”,
nginx.ingres.kubernetes.io/rewrite-target://$1
}
路径:/service1/?(*)
主持人:
-your-aks-subdomain.your-azure-region.cloudapp.azure.com
tls:[]
#-secretName:图表示例tls
#主持人:
#-chart-example.local
hpa:
...

感谢您的回复。“RoutePrefix”选项实际上用于更改swagger端点。在我的情况下,如果未设置,则可以通过
https:/service1/swagger
访问swagger UI,如果我设置了选项
c.RoutePrefix=“service1”;
那么我可以通过
https:/service1/service1
访问swagger用户界面。当你的意思是url更改为service1/service1时,你的意思是访问swagger.json?如果是这种情况,你需要更改
c.swagger端点(“/service1/swagger/v1/swagger.json”,“Giftaway API V1”);
c.swagger端点(“/swagger/V1/swagger.json”,“Giftaway API V1”);
。您只需在
c.RoutePrefix=“service1”
上指定基本路由,此路由将适用于每个enpoint。如果您在服务url中需要它,则需要将其添加到
路由(“API/{Controller}”上]
在您的控制器中,或使用sa中间件将路径添加到基本路由。您找到什么了吗?有同样的问题,但没有运气。@ecramer不幸的是,没有。这应该是在Ingress后面使用swagger时的常见问题,但我找不到任何帖子或文章提到它。查看此帖子:。不一定是最漂亮的s解决方案,不管它是如何运作的us@ecramer的确,它对我也很有效,非常感谢你让我知道。