部署在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站点的日志:
- 在IIS管理器中找到站点,进入「日志」,设置日志格式为W3C;
- 触发MVC的404请求后,打开日志文件(默认路径
C:\inetpub\logs\LogFiles); - 查看对应请求的
sc-status(404)和sc-substatus,比如:- 404.0:文件/目录不存在(大概率是URL错误);
- 404.17:动态内容映射问题(handler配置错误);
- 404.3:MIME类型限制(需要检查MIME设置)。
通过日志的详细信息,能更快锁定问题根源。
内容的提问来源于stack exchange,提问作者V.Prasad
相关产品推荐
相关产品推荐

