IIS 10.0部署ASP.NET Core Web API出现/api/api重复路由问题求助
问题排查与解决方案
核心原因:路由前缀重复叠加
你遇到的问题本质是IIS子应用的虚拟路径和API自身的路由前缀重复叠加:
- IIS中你把API作为ELB2B网站的子应用,虚拟路径设成了
/api - API代码里又配置了
/api的路由前缀(比如控制器上的[Route("api/...")]或全局路由模板里的api/)
两者叠加后就出现了/api/api/b2c/articles的实际访问路径。
具体修复方案
方案1:调整IIS子应用的虚拟路径
- 打开IIS管理器,找到ELB2B网站下的API子应用
- 右键选择「编辑应用程序」,把虚拟路径从
/api改成空(或其他不重复的路径,比如/api-service) - 重启IIS站点,此时用预期的
/api/b2c/articles就能访问(前提是API自身路由前缀保持/api)
方案2:修改API的路由配置
如果不想改动IIS配置,直接修改API代码去掉重复的/api前缀:
属性路由场景:修改控制器上的路由特性:
// 原代码(存在重复前缀) [Route("api/[controller]")] public class B2cController : ControllerBase { [Route("articles")] public IActionResult GetArticles() { ... } } // 修改后(移除api前缀) [Route("[controller]")] public class B2cController : ControllerBase { [Route("articles")] public IActionResult GetArticles() { ... } }此时IIS子应用的
/api+ 控制器路由/b2c/articles会组合成/api/b2c/articles,符合预期路径。全局路由场景:在Program.cs中调整全局路由模板:
// 原代码 app.MapControllerRoute( name: "default", pattern: "api/{controller}/{action}/{id?}"); // 修改后 app.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}");
方案3:检查ASP.NET Core模块配置
确认web.config中的aspNetCore节点配置正确,避免路径映射错误:
<system.webServer> <aspNetCore processPath="dotnet" arguments=".\YourApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer>
默认配置即可,无需额外修改path属性。
是否需要单独部署为新网站?
不需要强制单独部署,解决路由重复问题后就能正常使用。但如果存在以下场景,可以考虑单独部署:
- API和前端应用的部署频率、版本迭代差异大,分开部署更便于维护
- 需要给API配置独立的域名、端口或SSL证书
- 后续API有独立扩容、负载均衡的需求
内容的提问来源于stack exchange,提问作者Roxy'Pro
相关产品推荐
相关产品推荐

