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

Server 2012 IIS 8.5中WebApi与MVC路由失效(404.0错误)

解决.NET Framework 4.7.1 WebAPI+MVC部署到IIS 8.5后路由404问题

这种情况我之前在部署.NET WebAPI+MVC应用时碰到过好几次,结合你说的静态test.aspx能正常访问但所有路由返回404的现象,核心问题应该是IIS没有正确加载ASP.NET的路由处理模块,或者应用池/配置存在不兼容的情况。给你列几个按优先级排序的排查和解决步骤,你挨个试应该能搞定:

  • 检查应用池的托管模式和.NET版本:
    这是最常见的坑!IIS管理器中找到你的应用池,右键选择「高级设置」,确保:

    • .NET CLR版本 设置为 v4.0.30319(对应.NET Framework 4.7.1)
    • 托管管道模式 设置为 集成模式(经典模式下路由模块无法正常工作)
      改完后重启应用池。
  • 重新注册ASP.NET 4到IIS:
    有时候服务器上虽然安装了.NET Framework,但没有正确注册到IIS中。打开管理员权限的命令提示符,运行以下命令:

    %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
    

    如果你的服务器是64位系统,也可以同时运行64位版本的命令:

    %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
    

    执行完成后,运行 iisreset 重启IIS服务。

  • 确认UrlRoutingModule模块已加载:
    在IIS管理器中进入你的网站,点击左侧的「模块」,检查列表中是否存在 UrlRoutingModule-4.0。如果没有,手动添加:

    1. 点击右侧的「添加托管模块」
    2. 名称填 UrlRoutingModule-4.0,类型选择 System.Web.Routing.UrlRoutingModule
    3. 勾选「仅针对请求向ASP.NET应用程序或托管处理程序发出调用时调用」,点击确定。
  • 检查web.config中的路由相关配置:
    确保你的web.config的<system.webServer>节点包含以下配置,让IIS把无扩展名的请求交给ASP.NET路由处理:

    <modules runAllManagedModulesForAllRequests="true">
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    

    注意:runAllManagedModulesForAllRequests="true" 会让所有请求都经过托管模块,虽然有点性能损耗,但能解决大部分路由识别问题。

  • 排查IIS请求筛选规则:
    有时候IIS的请求筛选会拦截路由请求:

    1. 进入网站的「请求筛选」功能
    2. 切换到「HTTP动词」标签,确保GET、POST、PUT、DELETE等你用到的动词都处于允许状态
    3. 切换到「隐藏段」标签,检查是否有和你的路由路径相关的条目,如果有就删除。
  • 验证ASP.NET运行环境:
    在网站根目录新建一个check.aspx文件,内容如下:

    <%@ Page Language="C#" %>
    <!DOCTYPE html>
    <html>
    <body>
      <h1>.NET Version: <%= System.Environment.Version.ToString() %></h1>
    </body>
    </html>
    

    访问这个页面,如果能正常显示.NET 4.x的版本,说明ASP.NET基础运行环境是正常的;如果无法显示,回到前面的步骤检查应用池和ASP.NET注册情况。

内容的提问来源于stack exchange,提问作者Tyler Wright

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:12