You need to enable JavaScript to run this app. Kubernetes Ingress带动态参数对接ASP.NET Core Web API配置问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Ingress带动态参数对接ASP.NET Core Web API配置问题咨询

Kubernetes Ingress对接ASP.NET Core Web API路径异常解决方案

配置错误根因

你当前遇到所有请求都返回##的核心原因有两个:

  • 使用了正则匹配的path规则,但pathType配置为Prefix而非正则匹配要求的ImplementationSpecific,导致分组捕获失效,rewrite-target中的$2一直为空,所有请求都被重写到根路径/,所以全部命中根路径接口
  • 你的需求是透传全路径到后端服务,完全不需要加rewrite-target相关注解,额外的重写规则反而增加了出错概率

可行的Ingress透传配置

你只需要用以下最简配置就可以实现路径全透传,完全满足你的测试需求:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: myhost.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myservice
            port:
              number: 80

该配置会把myhost.com/xxx所有路径原封不动传给后端服务,访问/ep1就会返回1、/ep2返回2、/返回##,完全符合你的预期。


动态路径参数实现方案

你提到的myhost.com/balance/1312323这类带动态参数的路径,不需要对Ingress做特殊配置,沿用上面的全路径透传规则即可,后端ASP.NET Core按正常路由规则开发就行:

最小API写法示例

endpoints.MapGet("/balance/{userId}", async (HttpContext context, long userId) =>
{
    // 业务逻辑:根据userId查询账户余额
    await context.Response.WriteAsync($"用户{userId}的账户余额为XXX");
});

控制器写法示例

[ApiController]
[Route("[controller]")]
public class BalanceController : ControllerBase
{
    [HttpGet("{userId}")]
    public IActionResult GetBalance(long userId)
    {
        // 业务逻辑:根据userId查询账户余额
        return Ok(new { UserId = userId, Balance = 239.87 });
    }
}

ASP.NET Core的路由系统会自动解析路径中的userId参数,不需要Ingress做额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 20:36:05