.NET Core 6 API在AKS Nginx Ingress中Swagger UI Try It Out功能失效
解决AKS中.NET 6 API通过Nginx Ingress时Swagger Try It Out路径缺失问题
问题核心是Nginx Ingress的路径重写规则,导致Swagger UI无法识别API的前缀路径/serv1,生成的请求URL未添加该前缀,无法被Ingress转发到应用。以下是针对性解决步骤:
1. 修改Swagger配置(program.cs)
更新program.cs,添加Swagger Server配置并调整SwaggerUI参数,让Swagger明确API的基础路径前缀:
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new() { Title = "MyApp API", Version = "v1" }); // 配置Server,告知Swagger API的基础路径前缀 c.AddServer(new() { Url = "/serv1" }); }); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseSwagger(); app.UseSwaggerUI(options => { // 指定Swagger文档的访问路径,匹配Ingress转发后的地址 options.SwaggerEndpoint("/serv1/swagger/v1/swagger.json", "MyApp API V1"); // 设置RoutePrefix为空,通过/serv1/swagger即可访问Swagger UI options.RoutePrefix = string.Empty; }); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
2. 保留现有Ingress配置
当前Ingress的路径重写规则可正确将/serv1/*的请求转发到应用根路径,无需修改:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-world-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - http: paths: - path: /serv1/(.*) pathType: Prefix backend: service: name: myapp port: number: 80
3. 验证效果
部署更新后的应用,访问http://<你的Ingress IP>/serv1/swagger打开Swagger UI,此时「Try It Out」生成的请求URL会自动带上/serv1前缀(例如/serv1/WeatherForecast),可被Ingress正确转发到.NET API应用。
之前配置无效的原因
- 未添加Swagger Server配置:Swagger UI无法感知API的前缀路径,生成的请求直接使用根路径,无法匹配Ingress转发规则。
- RoutePrefix设置不当:错误的RoutePrefix会导致Swagger UI的访问路径或请求生成逻辑混乱。
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

