WebAPI路由异常:Swagger意外成为接口URL路径前缀
解决Swagger路径被追加到接口URL的问题
这问题我之前踩过坑!看你贴的代码,问题出在两个地方:SwaggerEndpoint的相对路径配置和中间件顺序混乱,导致Swagger错误地把自己的路径前缀加到了接口URL里。
问题根源分析
- 相对路径导致前缀继承:你在
UseSwaggerUI里写的./v1/swagger.json是相对路径,当你访问url.com/Swagger页面时,这个相对路径会被解析成url.com/Swagger/v1/swagger.json,Swagger读取这个配置后,会默认把当前页面的路径前缀/Swagger加到所有接口的URL上。 - 中间件顺序重复且错误:你重复调用了
app.UseDeveloperExceptionPage(),而且Swagger相关中间件的位置也不对,干扰了路由的正常解析。
修复步骤
直接修改你的Configure方法,按下面的代码调整:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } // 先处理HTTPS重定向和认证,再处理Swagger和Mvc app.UseHttpsRedirection(); app.UseAuthentication(); // Swagger配置放在Mvc之前 app.UseSwagger(); app.UseSwaggerUI(c => { // 把相对路径改成绝对路径,从根目录开始解析 c.SwaggerEndpoint("/swagger/v1/swagger.json", "LA NOSA - FE API"); // 可选:如果想直接通过根路径访问Swagger(比如url.com/),可以加上这行 // c.RoutePrefix = string.Empty; }); app.UseMvc(); }
修复原理
- 绝对路径消除前缀干扰:
/swagger/v1/swagger.json是从网站根目录出发的绝对路径,Swagger读取这个配置时,会正确识别接口的基础URL是url.com/,不会再错误追加/Swagger前缀。 - 规范中间件顺序:按
环境配置 → HTTPS重定向 → 认证 → Swagger → Mvc的顺序排列,完全符合ASP.NET Core中间件的执行逻辑,避免路由解析出现异常。同时移除了重复的UseDeveloperExceptionPage(),防止生产环境暴露敏感错误信息。
内容的提问来源于stack exchange,提问作者Zwac
相关产品推荐
相关产品推荐

