首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger:在Swagger中更改api路由

Swagger:在Swagger中更改api路由
EN

Stack Overflow用户
提问于 2018-09-13 16:12:13
回答 4查看 7.6K关注 0票数 6

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

代码语言:javascript
复制
app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
        });

通过这种配置,我可以通过https:<dns>/service1/swagger访问swagger。

现在的问题是,在Swagger中,当我想通过单击“试试看”按钮来测试api时,Swagger是https:<dns>/api/v1/contoller而不是https:<dns>/service1/api/v1/contoller的url。这意味着Swagger不知道path /service1/的存在。我发现了几个相关的问题,比如这个How to change base url of Swagger in ASP.NET core 。但它们并不能解决我的问题。我猜我需要为Swagger设定一条基本路线。如果有人能告诉我如何在ASP.NET核心2.0中为Swagger配置基本路径,我们将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-04 11:53:48

改变这一点:

代码语言:javascript
复制
app.UseSwagger();
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
});

对此:

用于dotnet核心2.x

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

For dotnet核心3.x (Swashackle5.x prerelease+)

代码语言:javascript
复制
app.UseSwagger(c =>
{
#if !DEBUG
  c.RouteTemplate = "swagger/{documentName}/swagger.json";
  c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new System.Collections.Generic.List<OpenApiServer>
  {
    new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}/service1" }
  });
#endif
});
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("./swagger/v1/swagger.json", "API V1");
});

#if !DEBUG . #endif是在本地机器调试时访问swagger用户界面所必需的。

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

代码语言:javascript
复制
...
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:
...
票数 11
EN

Stack Overflow用户

发布于 2018-10-01 16:13:55

请把你的public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {

在此之后使用:

代码语言:javascript
复制
app.UseSwaggerUI(c=>
              {
                   c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "Giftaway API V1");

此选项

代码语言:javascript
复制
c.RoutePrefix = "service1";

这会让你得到https:<dns>/service1/api/v1/controller

票数 1
EN

Stack Overflow用户

发布于 2018-09-13 18:19:39

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

https://stackoverflow.com/questions/52317778

复制
相关文章

相似问题

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