2010-07-01 2 views
4

Не стесняйтесь закрыть это, если это дубликат. Я не мог найти ответа.Как вы прерываете/перехватываете действия MVC с помощью ActionFilters?

Я хочу, чтобы иметь возможность разместить System.Web.ActionFilterAttribute в методе действий и переопределить метод OnActionExecuting для вставки бизнес-логики, который определяет, должно ли Действие быть выполнено.

Может ActionExecutingContext быть использован для отмены выполняющую метода действий и выполните одно из следующих действий:

  • Отправить код HTTP Status (и соответствующий <customError> страницы).
  • Выполните другой метод действий в пределах одного и того же контроллера.

ответ

2

Отправить код HTTP Status (и соответствующей <customError> страницы)

Почти:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    filterContext.HttpContext.Response.StatusCode = 500; 
} 

Execute другой метод действий в то же контроллер.

Да:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    filterContext.Result = new ViewResult() { ViewName = "SomeOtherAction" }; 
} 
+0

Я не думаю, что вторая половина вашего ответа верна. Это просто вернет другое представление, а не выполнит действие. – Ryan

+0

Как насчет 'filterContext.Result = new RedirectToRouteResult (...)' –

1

Вы всегда можете перенаправить на другой контроллер/действие в качестве фильтра действий.

См. Например, here.

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