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

.NET Core 2.0 MVC部署IIS后仅控制器方法报404求助

排查建议:.NET Core 2.0 IIS部署下控制器方法404问题

结合你描述的场景(IIS Express正常、仅部署到IIS后特定路径404),我整理了几个针对性的排查方向,按优先级排序:

1. 先修正路由配置的控制器名称约定

你的路由模板写的是{controller=MyController}/{action=Index}/{id?},但.NET Core的路由有个核心约定:控制器名称要自动去掉Controller后缀。也就是说,MyController对应的路由片段应该是My,而非MyController。

举个实际访问的例子:

  • 要调用Check方法,正确路径应该是 http://localhost/My/Check?objectUID=xxx&idfv=xxx
  • 如果你的实际控制器是HomeController,那路径就是http://localhost/Home/Check

如果之前在IIS Express里用的是符合约定的路径,部署到IIS后误用了带Controller后缀的路径,就会直接触发404,这是最容易踩的坑。

2. 检查IIS的AspNetCoreModule配置

.NET Core应用在IIS上运行完全依赖AspNetCoreModule(对应.NET Core 2.0的版本),如果这个模块没正确安装或映射,IIS会无法把深层路径的请求转发给你的应用,直接返回404:

  • 打开IIS管理器,查看站点的模块列表,确认AspNetCoreModule存在
  • 检查站点的处理程序映射,有没有一条路径为*、模块为AspNetCoreModule的规则
  • 如果缺失,重新安装.NET Core 2.0的Windows Server Hosting捆绑包,安装时确保勾选IIS相关组件

3. 通过web.config和日志定位请求流向

发布后的web.config是IIS和.NET Core的中间桥梁,重点检查:

  • 确认AspNetCore节点的processPath和arguments是否正确:比如processPath="dotnet",arguments=".\YourApp.dll",路径要指向正确的应用程序集
  • 把stdoutLogEnabled设为true,设置stdoutLogFile为.\logs\stdout,然后重新请求404路径:
    • 如果日志里完全没请求记录,说明IIS根本没把请求转发给应用,问题出在IIS配置
    • 如果有请求记录,查看是否有路由匹配失败的提示,或者应用抛出的异常信息

4. 清理发布目录后重新发布

你提到切换过Debug/Release模式,很可能存在旧文件残留的问题:

  • 完全清空发布目标文件夹的所有内容
  • 在Visual Studio里切回Release模式,重新执行发布,确保所有文件都是最新的Release版本
  • 发布完成后重启IIS站点,避免缓存干扰

5. 验证HTTP请求方法是否匹配

你的方法都标注了明确的HTTP特性:

  • Store是[HttpPost],必须用POST方法访问,用GET请求会直接404
  • Check和Retrieve是[HttpGet],参数要放在QueryString里(比如?objectUID=xxx&idfv=xxx)
    可以用Postman或curl工具验证请求方法是否正确,排除因方法不匹配导致的404。

6. 检查IIS的URL重写规则

如果你的站点配置了自定义URL重写规则,可能会拦截深层路径的请求:

  • 打开IIS管理器,查看站点的URL重写规则,确认没有规则会将/controller/method这类路径重定向或拦截
  • 暂时禁用所有自定义重写规则,测试是否能正常访问方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:09