asp.net-mvc - ASP.NET MVC : IAuthorizationFilter/Attribute prefered security check for login?

标签 asp.net-mvc authentication

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/

相关文章:

css - 根据屏幕尺寸动态改变元素位置

c# - Win32 用户模拟好奇心

windows - 如何保护 Windows Azure 上运行的 odata 服务的安全

WordPress 和 JWT 以及自定义 API Rest 端点

c# - 如何在 Asp.net MVC 中使用文件类型将文件内容保存在数据库表中

javascript - TrimStart()在文本框中动态空格,ASP.NET MVC

c# - ASP.NET MVC 路由和 Html.ActionLink

authentication - 删除 meteor 身份验证的登录 token

安装 FB 应用程序后,Android Facebook 示例应用程序无法登录

asp.net-mvc - 定义脚手架。 (关于动态数据和 ASP.NET MVC)