【问题标题】:Development web server fires Application_Error on 404, why doesn't IIS7?开发 Web 服务器在 404 上触发 Application_Error,为什么 IIS7 不触发?
【发布时间】:2010-12-08 13:52:50
【问题描述】:

我正在使用 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 中,/badurl.aspx 可以按预期工作,但 /badurl 只会导致通用服务器生成的 404 页面。

任何想法是什么导致了这种差异,以及如何让 IIS7 复制开发服务器的行为?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 应该在 标签内
    【解决方案2】:

    你可以尝试两种方式:

    1. 在你的代码中你可以设置Response.TrySkipIisCustomErrors = true;
    2. 在配置文件中可以设置:

    &lt;customErrors redirectMode="ResponseRewrite mode="On" defaultRedirect="appError.aspx" /&gt;

    【讨论】:

    • 'Response.TrySkipIisCustomErrors = true' 会去哪里?问题是我的代码根本没有受到影响,据我所知。 (我已经在 web.config 中有 '' 条目)。
    • @Herb 'Response.TrySkipIisCustomErrors = true' 将进入你的方法体。假设在 Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 之后,就 而言,检查您的条目是否具有此属性 redirectMode="ResponseRewrite"。你不能两者兼得。它是一个或另一个。我会推荐第二个。
    猜你喜欢
    • 2012-04-17
    • 2011-05-16
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多