asp.net - 如何捕获 global.asax 中的 AJAX WebMethod 错误?

标签 asp.net ajax error-handling error-logging webmethod

我正在使用在 ASP.net 应用程序中捕获 global.asax 中的错误的常见做法。在 global.asax 中,我有一个函数 Application_Error 将错误记录到数据库。

这非常适合记录用户请求页面时发生的错误。

但是,当从客户端调用的异步方法(用 [WebMethod] 属性修饰的方法)抛出异常时,这没有任何帮助。异常只是冒泡,可能会返回到客户端代码,但我希望错误处理代码在服务器上自动运行,类似于在 global.asax 中记录页面错误的方式。

我该如何实现这个目标?一种方法是用 try-catch 包装每个异步方法,但这对我来说似乎不是一个好的解决方案。

最佳答案

一种选择是创建 ASP.NET output filter拦截并记录 ASP.NET 发送到客户端的 WebMethod 异常。基本思想如下:

  1. 创建 Stream 的子类来捕获响应的内容。
  2. 当流关闭时,检查响应是否具有 500 状态代码以及 "jsonerror: true" header 。如果是,则响应包含 WebMethod 异常;记录异常。
  3. 在 Global.Application_PostMapRequestHandler 中,安装此类的实例作为 JSON 请求的输出过滤器。

完整的源代码,请参见this StackOverflow answer .

关于asp.net - 如何捕获 global.asax 中的 AJAX WebMethod 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6523409/

相关文章:

javascript - 需要使用 javascript 的内容控件中文本框的 clientId

asp.net - ASP.NET 是否将所有程序集从 bin 加载到 AppDomain 中?

asp.net - 将用户从编辑页面重定向回调用页面

javascript - 如何使用 Javascript 轻松监听 xhr 请求?

javascript - React - 如何处理图像/文件的 403 错误

vba - 比较两个单元格时获取 “Run-time error ' 1 3': Type mismatch”-错误

asp.net - 尝试学习 ASP.NET 的 WinForms/WPF 开发人员资源

javascript - ajax调用php来获取数据库行

javascript - 替代 AJAX 异步 : false option for form submit button click event handler

python - 无法弄清打印语句的问题