IAuthorizationFilter 与属性相结合是在 Controller 运行其类(class)之前检查用户是否登录的首选方法吗?
由于我是 MVC 新手,所以我一直在尝试找出如何处理在 WebForms 中完成的情况。我昨天遇到的问题是根据是否登录来检查用户是否能够查看页面。当我将我的一个项目“转变”为MVC项目时,我对于如何解决这种情况有点矛盾。
在 WebForms 版本中,我使用基本页面来检查用户是否已登录:
if (State.CurrentUser == null)
{
State.ReturnPage = SiteMethods.GetCurrentUrl();
Response.Redirect(DEFAULT_LOGIN_REDIRECT);
}
我发现的是这样的:
[AttributeUsage(AttributeTargets.Method)]
public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext context)
{
if (State.CurrentUser == null)
{
context.Result =
new RedirectToRouteResult
(
"Login",
new RouteValueDictionary
(
new
{
controller = "Login",
action = "Error",
redirect = SiteMethods.GetCurrentUrl()
}
)
);
}
}
}
然后我只需在任何给定的 Controller 方法上添加该属性即可,生活就很好了。问题是,这是首选和/或最佳方法吗?
最佳答案
不要重新发明轮子。 MVC 框架已经包含 AuthorizeAttribute,它可以处理您在此处粘贴的代码中没有的一些微妙之处,例如缓存。就用那个吧。但是,是的,属性是正确的选择。
关于asp.net-mvc - ASP.NET MVC : IAuthorizationFilter/Attribute prefered security check for login?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996387/