gpt4 book ai didi

asp.net - 在 Global.asax 上使用 IHttpModule

转载 作者:行者123 更新时间:2023-12-02 10:48:49 25 4
gpt4 key购买 nike

我接到了一项令人兴奋的任务:重写我们的异常处理系统。虽然我要指出的是,从应用程序范围的角度处理异常不是我们想要的,但通常当我们的团队人手不足而无法完成我们需要推出的大量工作时,这是不可避免的,所以请不要煽动异常处理的全局化解决方案在这里:)

我仔细寻找了哪些常见的解决方案。目前,我们使用 Global.asax 和 Application_Error 事件来执行 Server.GetLastError() ,该服务器被置于 session 状态,然后调用重定向到另一个页面,然后在该页面中检索 session 数据并以人类可读的格式输出。重定向还调用一个存储过程,该存储过程将仔细审核错误信息,这些信息 a) 通过电子邮件发送给开发人员,b) 从仅开发人员可见的网页中查看。

我看到的做事的新方法是使用 IHttpModule 接口(interface),使用 App_Code 中的类来执行这些操作(这是我的快速实现)

Imports Microsoft.VisualBasic

Public Class ErrorModule : Implements IHttpModule

Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
' Not used
End Sub

Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.Error, AddressOf context_Error
End Sub

Public Sub context_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ex As Exception = HttpContext.Current.Server.GetLastError

' do something with the error
' call the stored procedure
' redirect the user to the error page

HttpContext.Current.Server.ClearError()
HttpContext.Current.Response.Redirect("index.htm")

End Sub
End Class

我的问题是,与使用 Global.asax 事件相比,此解决方案有什么好处?此外,将数据传递到错误页面的最佳方法是什么?

编辑:顺便说一句,上面的代码确实有效;)

编辑:另外,HttpModule 在幕后如何工作?它是否只是在应用程序启动时将错误事件注册到该特定函数?

更新:

经过进一步调查,在使用 IHttpModule 接口(interface)时,获取 session 数据似乎真的非常困惑。我认为 MS 的 HttpModule 还不够成熟,无法在我们的特定场景中使用 - 除非出现特定于 session 数据的事件,否则我们使用它太危险了。

最佳答案

使用模块的优点是易于删除,禁用它所需要做的就是从配置中的 中删除它。

就您的数据而言,请尝试使用 Server.TransferServer.RewritePath - 这将保留所有当前数据(包括最后的服务器错误)。

如果由于某种原因清除了最后一个错误,您可以将错误保存到 HttpContext.Items在传输/重写之前,然后检索它。

编辑:为了响应您的编辑,IHttpModule 会附加到其 IHttpModule.Init 中的任何适当事件。实现。

关于asp.net - 在 Global.asax 上使用 IHttpModule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/610556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com