Asp.Net:Web服务抛出“线程被中止”

时间:2010-04-09 21:03:19

标签: c# asp.net web-services

我有一个我通过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... */
    ...
}

2 个答案:

答案 0 :(得分:3)

来自MS Support issue page

  

如果您使用Response.End,   Response.Redirect或Server.Transfer   方法,一个ThreadAbortException   异常发生。你可以使用   try-catch语句来捕获这个   异常。

     

此行为是设计使然。

     

要解决此问题,请使用一个   以下方法:

     
      
  1. 对于Response.End,请致电   HttpContext.Current.ApplicationInstance.CompleteRequest   方法而不是Response.End到   绕过代码执行到   Application_EndRequest事件。
  2.   

答案 1 :(得分:2)

因为它是WebMethod,所以最简单的方法就是不返回任何内容。这将是结束ajax请求响应的等效行为:

[WebMethod(true)]
public string MyMethod()
{
    if(!userIsLoggedIn)
    {
       HttpContext.Current.Response.StatusCode = 403;
       return null;
    }
}