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

部署在IIS10.0的Web API可通过浏览器访问但MVC应用调用报404求助

解决IIS部署Web API后MVC调用404的问题

我之前也遇到过类似的场景,浏览器能访问但客户端调用报错,结合你的配置和现象,给你几个针对性的排查和修复方向:

1. 优先检查IIS应用程序池的核心配置

这是最容易忽略的点:

  • 确保Web API所在的应用程序池是Integrated模式(你的web.config里的handler依赖integratedMode预条件,用Classic模式肯定会出问题),并且.NET CLR版本设置为v4.0+;
  • 检查应用程序池的运行身份权限,确保它有读取Web API站点目录文件的权限(可以先临时改成LocalSystem测试,确认不是权限问题)。

2. 修正Web.config的Handlers配置

你的当前配置里注释掉了ExtensionlessUrlHandler相关项,而Web API的无扩展名路由(比如/api/values)非常依赖这些处理器。建议替换成以下更合理的配置:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="WebDAVModule" />
    <remove name="FormsAuthentication" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="UrlRoutingModule-4.0" />
    <remove name="ApiURIs-ISAPI-Integrated-4.0" />
    
    <!-- 先处理无扩展名请求,确保Web API路由能捕获到 -->
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    
    <!-- 通用URL路由模块,覆盖所有请求 -->
    <add name="UrlRoutingModule-4.0" path="*" type="System.Web.Routing.UrlRoutingModule" preCondition="" verb="*" />
    
    <!-- 精准匹配API前缀的请求,避免和其他站点路由冲突 -->
    <add name="ApiURIs-ISAPI-Integrated-4.0" path="api/*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

关键调整:

  • 把ApiURIs-ISAPI-Integrated-4.0的path改成api/*,更精准匹配Web API的路由前缀;
  • 调整处理器顺序,让无扩展名处理器先执行,确保请求能正确转发到Web API路由系统。

3. 验证MVC应用的请求URL正确性

  • 确认MVC调用时用的是IIS部署的完整域名/IP地址(比如http://your-server-ip/api/yourcontroller/youraction),而不是本地调试的localhost:xxxx地址;
  • 检查URL的大小写、控制器/动作名称拼写,IIS默认对路径大小写敏感,要和Web API的路由定义完全一致。

4. 排查IIS请求筛选限制

打开IIS管理器,找到Web API站点:

  • 进入「请求筛选」→「HTTP动词」,确认PUT/DELETE/PATCH等你用到的动词没有被禁止;
  • 进入「请求筛选」→「文件扩展名」,确保允许无扩展名的请求通过(默认应该允许,但可以检查是否有自定义规则)。

5. 用IIS日志定位精准问题

如果以上都没解决,开启Web API站点的日志:

  1. 在IIS管理器中找到站点,进入「日志」,设置日志格式为W3C;
  2. 触发MVC的404请求后,打开日志文件(默认路径C:\inetpub\logs\LogFiles);
  3. 查看对应请求的sc-status(404)和sc-substatus,比如:
    • 404.0:文件/目录不存在(大概率是URL错误);
    • 404.17:动态内容映射问题(handler配置错误);
    • 404.3:MIME类型限制(需要检查MIME设置)。

通过日志的详细信息,能更快锁定问题根源。

内容的提问来源于stack exchange,提问作者V.Prasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:50:18