我正在尝试使用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();
}
}
}
答案 0 :(得分:5)
您需要将filterContext.Result
设置为非空值以避免下游处理,否则MVC不知道您已短路。最简单的方法就是:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (Membership.GetUser() == null) {
filterContext.Result = new RedirectResult("~/Logon");
}
}