我正在尝试使用 ActionFilterAttribute 来重定向未登录的用户。虽然我的重定向正在工作,但它会首先调用我的所有 ActionResult 代码。
关于为什么它不尊重真实旗帜并结束响应有什么想法吗?
HttpContext.Current.Response.Redirect("~/Logon",true);
这是我的操作结果:
[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();
}
}
}
您需要将其设置filterContext.Result
为非空值以避免下游处理,否则MVC不知道您已短路。最简单的方法就是:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (Membership.GetUser() == null) {
filterContext.Result = new RedirectResult("~/Logon");
}
}
@Madi - 不太可能;另一个问题是常规的 aspx,而不是 MVC,也不是动作过滤器。存在很大差异。
哦,你是对的,我的错。=)