Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是不是可用?

Posted

技术标签:

【中文标题】Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是不是可用?【英文标题】:Is Response.Redirect available in global.asax using IIS 7 Integrated Mode?Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是否可用? 【发布时间】:2012-03-15 07:47:06 【问题描述】:

我正在研究在集成模式下运行 IIS 7 时遇到的问题。我们有几个在 .net 3.5 中运行的应用程序。我们一直捕获和处理未处理异常的标准方法是利用 Global.asax 中的 Application_Error 方法(在这种情况下,未处理异常是一个 HttpException,它是在对不存在的 aspx 页面发出请求时创建的)。

在 Application_Error 内部,我们使用自定义错误处理将错误记录到数据库,发送警报电子邮件,然后重定向到指定的错误页面。错误记录和警报电子邮件按预期工作。重定向没有。

我使用 Fiddler 来查看请求/响应,我收到的 HTTP 302 页面与我的 customErrors 部分中的内容完全不同。

为什么 Response.Redirect 在 Application_Error 中不起作用?

到目前为止,这是我的代码:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim ex As System.Exception = Server.GetLastError
    Server.ClearError()

    If Not (TypeOf (ex) Is HttpException) Then
        //Run our internal error handling here
    Else
        Dim httpEx As HttpException = CType(ex, HttpException)
        Response.Clear()
        Response.StatusCode = httpEx.GetHttpCode()
        Response.TrySkipIisCustomErrors = True
        Server.Transfer("../Error.htm")
    End If
End Sub

当我尝试访问一个不存在的 aspx 页面时,它运行良好。但是,它不适用于静态页面。

我已经尝试了很多变体,以至于这段代码当前运行时没有 customErrors 或 httpErrors 部分。

【问题讨论】:

【参考方案1】:

如果要进入 IIS 错误页面,则需要将 TrySkipIisCustomErrors 设置为 true。

【讨论】:

我实现了这个并且它有效,但只有当我调用 Server.Transfer 到静态页面,而不是 aspx 页面时。任何想法为什么? @Chuck 你能发布你的 Application_Error 代码和你的 web.config 的 部分吗? 我会在早上发布。谢谢。

以上是关于Response.Redirect 在使用 IIS 7 集成模式的 global.asax 中是不是可用?的主要内容,如果未能解决你的问题,请参考以下文章

Response.Write 和 Response.redirect 不可同时使用

我可以在Response.Redirect中使用TempData吗?

Server.Transfer 和 Response.Redirect 用法区别

asp怎样用response.Redirect进行页面跳转。

Response.Redirect和Server.Transfer比较--(转)

response.redirect 用法