You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需修改代码解决K8s Ingress下.NET Core微服务Swagger 404问题

解决Swagger API调用404问题(无需修改微服务代码)

你的问题核心是Swagger生成的API端点缺少Ingress路由前缀/Service1,导致调用时直接请求根路径触发404。以下是两种无需修改微服务业务代码的解决方案:

方案一:通过Nginx Ingress的sub_filter修改Swagger OpenAPI文档

利用Nginx的sub_filter模块,在Ingress层面替换Swagger返回的openapi.json中的服务器地址,自动添加路由前缀。

修改你的Ingress配置,新增configuration-snippet注解:

kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      sub_filter '"servers":[{"url":"http://localhost"}]' '"servers":[{"url":"https://rewrite.bar.com/Service1"}]';
      sub_filter_once on;
  name: rewrite
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - path: /Service1(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: LoginService
            port: 
              number: 80

原理说明:

  • sub_filter会拦截Swagger返回的openapi.json内容,将默认的http://localhost服务器地址替换为带前缀的域名https://rewrite.bar.com/Service1
  • sub_filter_once on确保只替换一次匹配内容,避免重复替换
  • 此方案完全在Ingress网关层处理,微服务无需感知部署路径

方案二:通过Ingress传递前缀头,让Swagger动态适配(仅修改Swagger配置,不涉及业务代码)

如果你能接受调整Swagger的配置代码(但不硬编码部署路径),可以让Swagger读取Ingress传递的X-Forwarded-Prefix头,动态生成正确的服务器地址:

  1. 先修改Ingress,添加传递前缀的注解:
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/x-forwarded-prefix: "/Service1"
  1. 在.NET Core的Swagger配置中(Program.cs),添加动态服务器地址逻辑:
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Service1 v1");
    // 从请求头获取前缀,动态设置服务器地址
    var prefix = HttpContext.Request.Headers["X-Forwarded-Prefix"].FirstOrDefault() ?? "";
    var host = HttpContext.Request.Host.Value;
    var scheme = HttpContext.Request.Scheme;
    c.ConfigObject.Servers = new List<OpenApiServer>
    {
        new OpenApiServer { Url = $"{scheme}://{host}{prefix}" }
    };
});

原理说明:

  • x-forwarded-prefix注解让Nginx将路由前缀/Service1通过请求头传递给微服务
  • Swagger UI读取该头信息,动态拼接出正确的服务器地址,生成带前缀的API端点
  • 代码中没有硬编码任何部署路径,微服务依然保持对部署环境的无感知

内容的提问来源于stack exchange,提问作者Swapnil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:05:38