2015-11-13 7 views
-1

В моем контроллере у меня есть:иметь перед фильтром предотвратить ActionResult

protected override void OnActionExecuting(..) 
{ 
    .OnActionE.. 
    if(...) 
    { 
    Response.Redirect("/Login"); 
    } 
} 

public ActionResponse Index() 
{ 
    return View(); 
} 

В документации говорится, что OnActionExecuting запускается перед Index() однако это не так. В то время как Response.Redirect происходит, это происходит только после оценки Index. Возможно ли, чтобы фильтр запретил выполнение индекса?

+0

Что такое бит .OnActionE..'? Как правило, лучше ошибиться на стороне слишком много кода, чем, возможно, что-то, что на самом деле является источником проблемы, что, по-видимому, имеет место здесь. –

+0

Документация на 100% точна. Проблема в том, что вы неправильно используете эту функцию. Обычно лучше предположить, что вы делаете что-то неправильно, чем то, что вы первый человек, который обнаружил проблему в функции, которую тысячи разработчиков успешно используют каждый день. –

+0

@CraigW. Как я использую это неправильно. Дэвид опубликовал решение, которое, как я ожидал, просто не могло его выкопать в документации. –

ответ

2

OnActionExecuting работает перед действием, но это не остановка действие из также бег. Для этого вы можете установить свойство ResultActionExecutingContext. Нечто подобное возможно:

public override void OnActionExecuting(ActionExecutingContext context) 
{ 
    base.OnActionExecuting(context); 
    context.Result = new RedirectResult("/Login"); 
} 

Если Result установлен в любом месте в рамочном трубопроводе, который должен предотвратить последующие действия (в том числе других фильтров) от выполнения.

+0

Работал отлично. –

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