FileAttribute中的重定向OnActionExecuting无法正常工作

时间:2010-02-03 05:29:40

标签: c# asp.net asp.net-mvc-2

我有一个名为EditProfile的动作。为了确保安全,我添加了一个继承自RequireUserLogin的课程ActionFilterAttribute。在OnActionExecuting中,当我将用户重定向到登录页面时,在进入登录页面之前,它首先执行EditProfile操作代码(我不希望)而不是将用户重定向到登录页面。我想不要进入行动代码。目前我唯一的选择是抛出异常。还有其他选择吗?代码是:

public class RequireUserLogin : ActionFilterAttribute
    {       
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            if (string.IsNullOrEmpty(userID))
            {
                filterContext.HttpContext.Response.Redirect("http://localhost/test/login");
            }
            base.OnActionExecuting(filterContext);

}

EditProfile操作是:

[RequireUserLogin()]
public ActionResult EditProfile()
{
  ....
}

1 个答案:

答案 0 :(得分:2)

授权过滤器不应像普通操作过滤器那样编写,因为它们通过不同的代码路径。这里的最佳实践是继承AuthorizeAttribute并覆盖AuthorizeCore()和HandleUnauthorizedRequest()方法。

在AuthorizeCore()中,如果UserID为OK则返回true,否则返回false。

在HandleUnauthorizedRequest()中,设置filterContext.Result = new RedirectResult(...)。这将短路动作调用,框架将自动重定向。