我有一个名为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()
{
....
}
答案 0 :(得分:2)
授权过滤器不应像普通操作过滤器那样编写,因为它们通过不同的代码路径。这里的最佳实践是继承AuthorizeAttribute并覆盖AuthorizeCore()和HandleUnauthorizedRequest()方法。
在AuthorizeCore()中,如果UserID为OK则返回true,否则返回false。
在HandleUnauthorizedRequest()中,设置filterContext.Result = new RedirectResult(...)。这将短路动作调用,框架将自动重定向。