You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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子应用的虚拟路径

  1. 打开IIS管理器,找到ELB2B网站下的API子应用
  2. 右键选择「编辑应用程序」,把虚拟路径从/api改成空(或其他不重复的路径,比如/api-service)
  3. 重启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:07:49