.NET 8 Swagger UI生成CURL路径错误问题求助
问题解决:.NET 8 Swagger UI生成CURL请求缺失前缀
问题描述
Swagger UI访问地址dev.internal/myapi/swagger/index.html可正常使用,但生成的CURL请求缺失/myapi/前缀——例如正确路径应为dev.internal/myapi/api/v2/configuration/list?page=0,实际生成的路径缺少/myapi/导致请求失败。此前修改UseSwaggerUI配置后,访问地址出现重复的myapi路径(dev.internal/myapi/myapi/swagger/index.html),问题未解决。
解决方案
问题根源在于Swagger生成的swagger.json中未配置正确的基础路径,导致Swagger UI生成请求时缺少前缀。需从Swagger文档生成和UI配置两方面调整:
1. 配置Swagger文档的基础路径
在AddSwaggerGen中添加Server配置,指定包含/myapi的基础路径:
builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My Cool API V1", Version = "v1" }); // 添加Server配置,指定API的基础路径前缀 c.AddServer(new OpenApiServer { Url = "/myapi", Description = "开发环境服务器" }); });
2. 正确配置Swagger和SwaggerUI中间件
调整UseSwagger和UseSwaggerUI的路由配置,避免路径重复:
// 配置Swagger文档的访问路径 app.UseSwagger(c => { // 让swagger.json的访问路径为 /myapi/swagger/{documentName}/swagger.json c.RouteTemplate = "myapi/swagger/{documentName}/swagger.json"; }); // 配置Swagger UI的访问路由 app.UseSwaggerUI(c => { c.RoutePrefix = "myapi/swagger"; // Swagger UI的访问前缀,对应地址dev.internal/myapi/swagger // 使用相对路径指向swagger.json,避免重复前缀 c.SwaggerEndpoint("v1/swagger.json", "My Cool API V1"); });
说明
AddSwaggerGen中的AddServer是核心:Swagger UI生成请求时会以该配置的Url作为基础路径,自动为CURL请求加上/myapi前缀。- 调整后的配置既保证Swagger UI访问地址正确,又能让生成的请求路径包含所需前缀。
内容的提问来源于stack exchange,提问作者Angel Andres Loaiza Gonzalez
相关产品推荐
相关产品推荐

