2015-01-14 2 views
0

Я внедрил пользовательский IExceptionFilter, чтобы обрабатывать исключение, которое испытывают некоторые пользователи в библиотеке сторонних разработчиков, потребляемой нашим приложением. Когда возникает это конкретное состояние ошибки, мне нужно изменить файлы cookie пользователя (чтобы очистить их состояние сеанса), но то, что я нахожу, заключается в том, что никакие файлы cookie, похоже, не выходят из фильтра. Не уверен, что не так, или даже как отладить его.Невозможно установить Cookie в ASP.NET MVC IExceptionFilter

Я изменил фильтр функциональных бит, чтобы упростить намерение, но вот суть фильтра. Я убедился, что это первый фильтр, который запускается на контроллере, и протестировал удаление фильтра HandleErrorAttribute, но безрезультатно. После запуска кода ниже «comecookie» никогда не устанавливается на клиенте.

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 }); 
Смежные вопросы