删除ExtensionlessUrlHandler-Integrated-4并使用RewritePath时,IIS 7.5自定义404页面为空

时间:2012-10-11 23:02:59

标签: asp.net iis-7 httpmodule

我正在使用HTTPContext.RewritePath作为没有扩展且在文件系统上不存在的路径。我希望它返回我的自定义404页面。我在Windows 7上使用IIS 7.5,.Net 4和Integrated Pipeline。

重写发生在名为RewriteExampleModule的HTTPModule中。如下图所示。

using System;
using System.Web;

public class RewriteExampleModule : IHttpModule
{
    public RewriteExampleModule()
    {
    }

    private void context_PostAuthorizeRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        String path = context.Request.RawUrl;
        if (path.IndexOf("/edit/") > -1)
        {
            path = path.Replace("/edit/", "/");
            context.RewritePath(path);
        }
    }
    public bool IsReusable
    {
        get { return true; }
    }

    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.PostAuthorizeRequest += new EventHandler(context_PostAuthorizeRequest);
    }
}

它在模块部分配置如下,

<modules runAllManagedModulesForAllRequests="true">
  <add name="RewriteExampleModule" type="RewriteExampleModule" />
</modules>

/ edit / asdf请求的结果/ asdf不存在是500错误。它应该是404,但它不是。

下面,

IIS 7.5 – a breaking change in extensionless URIs handling after Windows Server 2008 R2 SP1 is applied?

我已经删除了ExtensionlessUrlHandler,现在得到了404.但是,响应的主体是空的。与下面显示的重写模块一起是我的完整web.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="true" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="RewriteExampleModule" type="RewriteExampleModule" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    </handlers>
    <httpErrors existingResponse="Replace" errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/404error.aspx" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
</configuration>

使用此配置调用

/ edit / asdf

其中/ asdf不存在返回404状态代码,但没有在httpErrors下的web.config中指定的自定义内容。

为什么404身体是空的?没有重写/ edit /的任何其他路径都可以。

0 个答案:

没有答案