我正在使用在 ASP.net 应用程序中捕获 global.asax 中的错误的常见做法。在 global.asax 中,我有一个函数 Application_Error
将错误记录到数据库。
这非常适合记录用户请求页面时发生的错误。
但是,当从客户端调用的异步方法(用 [WebMethod]
属性修饰的方法)抛出异常时,这没有任何帮助。异常只是冒泡,可能会返回到客户端代码,但我希望错误处理代码在服务器上自动运行,类似于在 global.asax 中记录页面错误的方式。
我该如何实现这个目标?一种方法是用 try-catch 包装每个异步方法,但这对我来说似乎不是一个好的解决方案。
最佳答案
一种选择是创建 ASP.NET output filter拦截并记录 ASP.NET 发送到客户端的 WebMethod 异常。基本思想如下:
- 创建 Stream 的子类来捕获响应的内容。
- 当流关闭时,检查响应是否具有 500 状态代码以及
"jsonerror: true"
header 。如果是,则响应包含 WebMethod 异常;记录异常。 - 在 Global.Application_PostMapRequestHandler 中,安装此类的实例作为 JSON 请求的输出过滤器。
完整的源代码,请参见this StackOverflow answer .
关于asp.net - 如何捕获 global.asax 中的 AJAX WebMethod 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6523409/