Почему мой ActionFilterAttribute перенаправляет после выполнения кода действия? - PullRequest
2 голосов
/ 08 июля 2010

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

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

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 Ответ

5 голосов
/ 08 июля 2010

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

public override void OnActionExecuting(ActionExecutingContext filterContext) {
  if (Membership.GetUser() == null) {
       filterContext.Result = new RedirectResult("~/Logon");
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...