开发Web服务器在404上激活Application_Error,为什么不用IIS7?

时间:2009-10-21 02:22:02

标签: asp.net iis-7 http-status-code-404 cassini

我正在使用Application_Error来捕获一些遗留URL和URL快捷方式。在Global.vb中,我有这段代码:

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim serverError = TryCast(Server.GetLastError(), HttpException)
        If serverError IsNot Nothing Then
            Dim errorCode As Integer = serverError.GetHttpCode()
            If 404 = errorCode Then
               ' Do some custom processing here
            End If
        End If
    End Sub

在web.config中我有这个,以确保所有请求,而不仅仅是以.aspx结尾的请求都由aspnet_isapi.dll处理,所以我可以处理它们:

        <add name="ASP.NET-ISAPI-2.0-Wildcard" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv2.0,bitness32" />

在我的开发框中(使用Cassini),在所有情况下都可以正常工作:/ badurl和/badurl.aspx都会导致Application_Error触发。

但是,在IIS7中,/ badur.aspx按预期工作,但/ badurl只会导致通用服务器生成的404页面。

任何想法导致差异的原因,以及我如何让IIS7复制开发服务器的行为?

2 个答案:

答案 0 :(得分:0)

尝试将此添加到web.config文件中。

 <customErrors mode="On" defaultRedirect="appError.aspx">
          <error statusCode="403" redirect="appError.aspx"/>
          <error statusCode="404" redirect="appError.aspx"/>
        </customErrors>

答案 1 :(得分:0)

您可以尝试两种方式:

  1. 在您的代码中,您可以设置Response.TrySkipIisCustomErrors = true;
  2. 在配置文件中,您可以设置:
  3. <customErrors redirectMode="ResponseRewrite mode="On" defaultRedirect="appError.aspx" />