2017-02-20 6 views
1

Я использую ASP.NET Core. Один из моих контроллеров звонит в службы, которые бросают различные исключения. Я хочу обрабатывать их в фильтре исключений (не промежуточном программном обеспечении).Перенаправление из фильтра исключений

public class MyHandlerAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(ExceptionContext c) 
    { 
     if (c.Exception is FooException) { 
      // redirect with arguments to here 
     } 
     else if (c.Exception is FooException) { 
      // redirect with arguments to there 
     } 
     else { 
      // redirect to main error action without arguments, as 500 
     } 
     base.OnException(c); 
    } 
} 

В отличие от фильтров действий, фильтр исключений не дает мне доступ к Controller, так что я не могу сделать c.Result = controller.RedirectTo...().

Итак, как мне перенаправить на мое действие с ошибкой?

ответ

4

HttpContext выставлен на ExceptionContext, поэтому вы можете использовать его для перенаправления.

context.HttpContext.Response.Redirect("..."); 

Существует также Result свойства, но я не знаю, если это будет истолковано после выполнения фильтра. Это стоит попробовать, хотя:

context.Result = new RedirectResult("..."); 

Если он работает, он должен также работать с RedirectToActionResult или RedirectToRouteResult.

+0

Второй не работает. Первый работает, если вы также устанавливаете 'context.Exception = null;' Однако этот тип перенаправления не позволяет мне указывать аргументы - это возможно? – grokky

+0

Также работает второй вариант. Но вы также должны установить 'context.ExceptionHandled = true;'. – juunas

+0

@juunas Если я это сделаю, тогда он просто сделает пустую страницу ... Странно! – grokky

Смежные вопросы