在IIS7上将* .MVC映射到aspnet_isapi.dll

时间:2011-09-26 22:08:32

标签: model-view-controller iis-7 isapi

我们有一个在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中输入文件名的随机内容,就会发生同样的错误。

1 个答案:

答案 0 :(得分:3)

我刚刚处理过这个问题,对我来说真正做到的是摆脱整个MvcHttpHandler(从你的

中移除它)
<system.webServer>/<handlers>

配置标签)。

MSDN表示只有当UrlRoutingModule没有为所有请求启用时(在IIS7 +中我们可以),此处理程序才有用,因此它对IIS6有用(以及为什么我们需要* .mvc扩展名为路线正确)。

所以只需删除处理程序中的MvcHttpHandler引用,并确保:

  • 让应用程序在集成模式(非经典)的应用程序池中运行
  • 您将runAllManagedModulesForAllRequests模块属性设置为“true”

    <modules runAllManagedModulesForAllRequests="true">
    

如果你仍然得到404,那么你要么是你的MVC(这真的让我偏离了S:S)另一个原因。

相关问题