2

Я пытаюсь использовать ActionFilterAttribute для перенаправления пользователей, которые не вошли в систему. Хотя мой перенаправление работает, он перенаправляет, но сначала вызывает все мои коды ActionResult.Почему мой ActionFilterAttribute перенаправляется после запуска кода действия?

Любые идеи относительно того, почему он не соблюдает истинный флаг и не заканчивает ответ?

HttpContext.Current.Response.Redirect("~/Logon",true); 

Вот мой ActionResult:

[RequireLoggedIn] 
public ActionResult Create() 
{ 
    return View(_MessageService.GetAllMessageCategories()); 
} 

Это мой Атрибут:

public class RequireLoggedIn : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (Membership.GetUser() == null) 
     { 
      //Not logged in so back to the logon page. 
      HttpContext.Current.Response.Redirect("~/Logon",true); 
      HttpContext.Current.Response.End(); 
     } 
    } 
} 
+1

@Madi - маловероятно; что другой вопрос является регулярным aspx, а не MVC, а не фильтрами действий. Есть большие различия. –

+0

О, ты прав, моя ошибка. =) –

ответ

5

Вы должны установить filterContext.Result к чему-то ненулевым, чтобы избежать обработки вниз по течению, в противном случае MVC не знает, что у вас короткое замыкание. Самый простой подход был бы просто:

public override void OnActionExecuting(ActionExecutingContext filterContext) { 
    if (Membership.GetUser() == null) { 
     filterContext.Result = new RedirectResult("~/Logon"); 
    } 
} 
+0

Спасибо за это :) – Andrew