我们有一个在IIS6上托管的.net 3.5应用程序(MVC和WebForms混合)。为了使它在IIS6上运行,我们必须向IIS添加自定义映射,以便* .MVC映射到aspnet_isapi.dll。
所以我们的网址最终会像这样:
<host>\someController.mvc\action
但现在正在IIS7上设置这个Web应用程序,使用经典模式池,尝试做同样的事情,这样我们就不必改变应用程序的任何内容。
但是在IIS7中添加* .MVC Handler映射之后,它似乎仍然无法获取它。每次我们导航到MVC页面时,都会收到404错误。但是,我们的.aspx页面加载正常。
仔细检查后,失败的请求跟踪会继续抱怨以下内容
ModuleName="IIS Web Core", Notification="MAP_REQUEST_HANDLER", HttpStatus="404", HttpReason="Not Found", HttpSubStatus="0", ErrorCode="The system cannot find the file specified.
(0x80070002)", ConfigExceptionInfo=""
我在圈子里跑。我们能够在另一台IIS7机器上设置它,但是这个机器试图设置它只是拒绝工作。我真的不知道自己错过了什么。它就像映射规则根本没有触发。因为如果我们只是在URL中输入文件名的随机内容,就会发生同样的错误。
答案 0 :(得分:3)
我刚刚处理过这个问题,对我来说真正做到的是摆脱整个MvcHttpHandler(从你的
中移除它)<system.webServer>/<handlers>
配置标签)。
MSDN表示只有当UrlRoutingModule没有为所有请求启用时(在IIS7 +中我们可以),此处理程序才有用,因此它对IIS6有用(以及为什么我们需要* .mvc扩展名为路线正确)。
所以只需删除处理程序中的MvcHttpHandler引用,并确保:
您将runAllManagedModulesForAllRequests模块属性设置为“true”
<modules runAllManagedModulesForAllRequests="true">
如果你仍然得到404,那么你要么是你的MVC(这真的让我偏离了S:S)另一个原因。