2009-09-25 63 views
0

我創建了一個新類,該類繼承自HandleErrorAttribute以不同方式處理Ajax請求。 OnException方法唯一的優先級是:Extended HandleError屬性 - 狀態碼112031(連接重置)

public override void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      filterContext.ExceptionHandled = true; 
      filterContext.HttpContext.Response.Clear(); 
      filterContext.HttpContext.Response.StatusCode = 500; 
      filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; 
      filterContext.Result = new JsonResult { Data = errorText }; 
      return; 
     } 
     base.OnException(filterContext); 
    } 

這個工作大概有一半的時間。當它工作時,響應中的狀態碼是500,並提供錯誤消息。否則,狀態碼爲12031,錯誤信息爲空。

顯然狀態代碼12031是指:

ERROR_INTERNET_CONNECTION_RESET 與服務器的連接已重置。

不知道爲什麼會發生這種情況。

回答

0

我不確定這裏發生了什麼,但我可以做出有根據的猜測。我們做的事情非常相似,除非我們先調用base.OnException,然後我們測試filterContext.ExceptionHandled以查看基本過濾器是否處理了異常。這一直對我們有效,並且與你所做的不同。請注意,基本過濾器不會總是處理異常(有關詳細信息,請參閱源代碼)。

請注意,基本過濾器會執行您的過濾器無法執行的操作,例如測試IsCustomErrorEnabled和異常的特定類型。有一些不應該被處理的例外;再次,請參閱MVC源代碼以獲取關於此的詳細信息。

所以我瘋狂的猜測是,在某些情況下,你的過濾器(當有AJAX請求時總是處理異常)和基本過濾器做不同的事情。我建議你嘗試我們正在使用的方法(首先調用base,如果請求是AJAX請求,則表示應該處理異常),然後查看是否不執行自定義AJAX處理。最終會爲你更好地工作。

+0

嘗試了您的建議。還是行不通。我注意到,我只能在操作方法中引發異常時重現此問題。 – chief7 2009-09-25 18:56:18