我有一个HTTPModule:
public class MyErrorModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.Error += new EventHandler(Application_Error);
}
public void Application_Error(object sender, EventArgs e)
{
// Handle error
}
}
在web.config中声明(IIS7.5集成):
<system.webServer>
<!-- some more stuff -->
<modules runAllManagedModulesForAllRequests="true">
<add name="ApplicationErrorModule" preCondition="" type="xxxxx"/>
</modules>
<!-- some more stuff -->
</system.webServer>
我试过没有runAllManagedModulesForAllRequests="true"
我在正常的webs.aspx.cs中有一个WebMethod(它是一个大项目的一部分,我希望我不必在asmx中移动所有内容......):
[WebMethod]
public static Model.Response GetDetails(string email)
{
// Do some stuff and return JSON data
}
我使用JQuery和AJAX来调用
https://servername/webs.aspx/GetDetails
在正常情况下(没有未处理的Exception)事情很好,web-service返回我需要的东西。但有些情况下我需要在DLL中调用可以执行
的代码Context.Redirect(page,true);
生成ThreadAbortException
我希望HttpModule会有所帮助,但是当THreadAbortException发生时,它不会进入模块。
我跟着一些suggestions使用了
<customErrors mode="Off" />
但它没有帮助。
ASP.Net在哪里捕获?我正在使用4.0。如何在Handler中捕获异常?
我在HTTP响应标头中看到一个jsonerror=true
,这使得我有另一个地方被捕获。我没有看到其他自定义模块会捕获异常。
更新
我尝试使用webs.asmx
webservice并使用正确的注释(ScriptService等等),但仍然无法捕获ThreadAbortException