我有一个我通过ajax调用的Web服务,需要用户登录。在每个我要检查用户是否登录的方法中,如果不是,则发送403代码,但是当我打电话给Response.End()
我收到错误“Thread is aborted”。我该怎么称呼呢?
[WebMethod(true)]
public string MyMethod()
{
if(!userIsLoggedIn)
{
HttpContext.Current.Response.StatusCode = 403;
HttpContext.Current.Response.End();
}
/* Do stuff that should not execute unless the user is logged in... */
...
}
答案 0 :(得分:3)
如果您使用Response.End, Response.Redirect或Server.Transfer 方法,一个ThreadAbortException 异常发生。你可以使用 try-catch语句来捕获这个 异常。
此行为是设计使然。
要解决此问题,请使用一个 以下方法:
- 对于Response.End,请致电 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是Response.End到 绕过代码执行到 Application_EndRequest事件。
醇>
答案 1 :(得分:2)
因为它是WebMethod
,所以最简单的方法就是不返回任何内容。这将是结束ajax请求响应的等效行为:
[WebMethod(true)]
public string MyMethod()
{
if(!userIsLoggedIn)
{
HttpContext.Current.Response.StatusCode = 403;
return null;
}
}