除非物理文件存在,否则Global.asax Application_BeginRequest不会触发 - 404

时间:2014-03-05 12:27:49

标签: asp.net .net iis url-rewriting global-asax

我在Global.asax中使用URL重写(HttpContext.Current.RewritePath(...)),因此物理文件大多不存在。 一切正常,直到我不得不从IIS(8.5)中删除网站并再次添加它。

现在我的每个请求都找不到404。示例http://localhost/site/article123 并且Global.asax Application_BeginRequest事件甚至没有解雇。

但是,如果我在文件夹/site/article123中添加空的default.aspx文件,则一切正常,URL正确地重写。

文件没有改变,所以它应该是IIS配置的问题。

我在web.config中有以下内容:
<modules runAllManagedModulesForAllRequests="true">

IIS中的项目设置为具有应用程序池.NET v2.0 Classic的应用程序

编辑:
IIS 8.0中的相同故事

2 个答案:

答案 0 :(得分:8)

问题出在Managed Pipeline Mode设置为classic。通过将应用程序池从classic更改为integrated来解决问题,从.NET v2.0 Classic切换到.NET v2.0

据我所知:在classic模式下,IIS正在管理请求,而在intergated模式下,传入的IIS请求会映射到ASP.NET引擎。

有关管道模式的更多信息:What is the difference between 'classic' and 'integrated' pipeline mode in IIS7?

答案 1 :(得分:0)

您需要在IIS 8.5下安装ReWrite Module

使用Web Installer Platform进行安装。