Swagger:在Swagger UI中更改API路线

时间:2018-09-13 16:12:14

标签: swagger asp.net-core-2.0

我在AKS上部署了两个kubernetes服务,它们从Nginx入口控制器接收流量。这两个服务的端点是https:<dns>/service1https:<dns>/service2。现在,我想为每个服务设置Swagger。以下是我为其中一项服务设置Swagger UI的方法。

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

使用此配置,我可以通过https:<dns>/service1/swagger访问招摇。

现在的问题是,在Swagger UI中,当我想通过单击“试用”按钮然后单击“ Excute”按钮来测试api时,Swagger UI访问的URL是https:<dns>/api/v1/contoller而不是{{1} }。这意味着Swagger UI不知道路径https:<dns>/service1/api/v1/contoller的存在。我发现了几个与此类似的问题How to change base url of Swagger in ASP.NET core 。但是它们不是解决我问题的方法。我的猜测是我需要为Swagger设置基本路径。如果有人能告诉我如何在ASP.NET core 2.0中为Swagger配置基本路径,将不胜感激。

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

请输入您的public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {

在此之后使用:

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

此选项

c.RoutePrefix = "service1";

这会让您https:<dns>/service1/api/v1/controller

答案 2 :(得分:0)

在您的入口中不要使用此注释

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

答案 3 :(得分:0)

更改此:

app.UseSwagger();
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
});

对此:

app.UseSwagger(c =>
{
#if !DEBUG
  c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = "/service1");
#endif
});
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("./swagger/v1/swagger.json", "API V1");
});

#if!DEBUG ... #endif 对于访问本地计算机中的swagger ui是必需的。

注意:我假设“ / service1”与头盔图表的values.yaml文件中的值相同。 (请参见下文)

...
ingress:
  enabled: true
  annotations: {
    kubernetes.io/ingress.class: "nginx",
    nginx.ingress.kubernetes.io/rewrite-target: /$1
  }
  path: /service1/?(.*)
  hosts:
    - your-aks-subdomain.your-azure-region.cloudapp.azure.com
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

hpa:
...