2015-01-14 7 views
0

응용 프로그램에서 사용하는 타사 라이브러리에서 일부 사용자가 겪고있는 예외를 처리하기 위해 사용자 지정 IExceptionFilter를 구현했습니다. 이 특정 오류 상태가 발생하면 사용자의 쿠키 (세션 상태를 지우려면)를 수정해야하지만 쿠키에서 필터를 빠져 나올 수없는 것으로 나타났습니다. 무엇이 잘못되었거나 디버깅하는 방법을 모릅니다.ASP.NET MVC에서 쿠키를 설정할 수 없습니다. 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입니다.

    GlobalFilters.Filters.Add(new HandleErrorAttribute() { Order = 0 }); 
    GlobalFilters.Filters.Add(new HandleSessionErrorAttribute() { Order = 1 }); 
    
    :
  • 에 CustomErrors는 일

초기화 코드를 작동하려면에 대한해야합니다