C# WebMethod中未正确捕获ThreadAbortException
我必须从C# WebMethod中未正确捕获ThreadAbortException,c#,jquery,asp.net,ajax,webmethod,C#,Jquery,Asp.net,Ajax,Webmethod,我必须从WebMethod重定向,我知道我不能。所以我只是尝试以字符串形式返回页面url,并将在successcallback中重定向 问题是在重定向之前,我有大量的代码,这些代码都写在一个集中的方法中(唯一在重定向之前调用以执行相同操作的方法)。在重定向中,我还必须调用该函数 我只是把我的代码放在这里,没有调用集中式函数来更好地理解 [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string Te
WebMethod
重定向,我知道我不能。所以我只是尝试以字符串形式返回页面url,并将在success
callback中重定向
问题是在重定向之前,我有大量的代码,这些代码都写在一个集中的方法中(唯一在重定向之前调用以执行相同操作的方法)。在重定向中,我还必须调用该函数
我只是把我的代码放在这里,没有调用集中式函数来更好地理解
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string TestException()
{
try
{
System.Web.HttpContext.Current.Response.Redirect("Test.aspx");
return "No Exception";
}
catch(Exception ex)
{
return "Exception";
}
}
作为响应,我得到了内部服务器错误(505)
和System.Threading.ThreadAbortException
,而不是像catch块那样返回“Exception”
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string TestException()
{
try
{
System.Web.HttpContext.Current.Response.Redirect("Test.aspx");
return "No Exception";
}
catch(ThreadAbortException ex)
{
Thread.ResetAbort();
return "Exception";
}
}
其他例外情况并非如此,即如果我将Response.Redirect
替换为
int i = 0;
int j = 5/i;
它也会引发异常,但不会给我内部服务器错误(505)
,而是返回“exception”,即从catch块返回的字符串
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string TestException()
{
try
{
System.Web.HttpContext.Current.Response.Redirect("Test.aspx");
return "No Exception";
}
catch(ThreadAbortException ex)
{
Thread.ResetAbort();
return "Exception";
}
}
我的问题是
System.Threading.ThreadAbortException
与其他异常区别对待集中式
函数,通过检查其他参数,我可以返回字符串而不是重定向,但我想知道是否有任何东西可以在webmethod或任何其他地方使用,而无需触摸集中式函数即可获得工作Thread.ResetAbort()
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string TestException()
{
try
{
System.Web.HttpContext.Current.Response.Redirect("Test.aspx");
return "No Exception";
}
catch(ThreadAbortException ex)
{
Thread.ResetAbort();
return "Exception";
}
}
在WEB方法中使用Response.Redirect
不是一个好做法!使用WEB方法时
应遵循SOAP
规则。您需要知道调用响应。重定向将调用Response.End
MSDN第页:
绝对URL(例如)或
可以为
目标位置,但某些浏览器可能拒绝相对URL重定向
调用End,在调用时引发ThreadAbortException异常
完成
使用线程后,控制台上的Give身份验证失败
错误。ResetAbort
@Imad信任我,使用HttpRedirect
并不是一个好做法。我建议你不要这样做。很久以前就同意了。我还想试试,它不起作用。我接受了它,因为我觉得这是一个很好的解释。如果这是一个坏习惯,那么什么是好习惯?您能否提供一个重定向遵循SOAP规则的示例?