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进行页面跳转。