2015-01-14 167 views
0

我已經實現了一個自定義IExceptionFilter來處理一些用戶遇到的異常,我們的應用程序正在使用第三方庫。當這個特定的錯誤狀態發生時,我需要修改用戶的cookies(以清除他們的會話狀態),但是我發現沒有任何cookie似乎使它不在過濾器中。不知道什麼是錯的,甚至如何調試它。無法在ASP.NET MVC中設置Cookie IExceptionFilter

我已經修改了功能位過濾器以簡化意圖,但這裏是過濾器的要點。我確定它是在控制器上運行的第一個過濾器,並且測試除去HandleErrorAttribute過濾器也無濟於事。在下面的代碼運行之後,「somecookie」從未在客戶端上設置。

public class HandleSessionErrorAttribute : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext == null) throw new ArgumentNullException("filterContext"); 

     var exception = filterContext.Exception as HttpException; 

     if (exception != null && exception.Message.Equals("The session state information is invalid and might be corrupted.")) 
     { 
      filterContext.HttpContext.Response.Cookies.Add(new HttpCookie("somecookie") 
      { 
       Value = DateTime.Now.ToString(), 
       Expires = DateTime.Now.AddMinutes(5), 
      });    
     } 
    } 
} 

回答

0

好吧,算了一下。兩個問題阻止邏輯得手:

  • 的HandleErrorAttribute必須之前運行其修改響應的任何屬性。 HandleErrorAttribute的部分實現是Clear() the response
  • 的customErrors必須這個工作

其工作的初始化代碼:

GlobalFilters.Filters.Add(new HandleErrorAttribute() { Order = 0 }); 
GlobalFilters.Filters.Add(new HandleSessionErrorAttribute() { Order = 1 });