自定义授权属性 - 我可以存储一个值供以后使用吗?

时间:2013-02-26 19:13:57

标签: asp.net-mvc c#-4.0 asp.net-mvc-4 custom-attributes

我有一个自定义授权属性,它基本上只是验证cookie是否随请求一起发送,并且已分配了值。

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
            throw new ArgumentNullException("filterContext");

        bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)
                      || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true);

        if (skipAuthorization) return;

        var cookie = filterContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];

        if (cookie != null)
        {
            var decCookie = FormsAuthentication.Decrypt(cookie.Value);

            if(decCookie != null)
            {
                if (!string.IsNullOrEmpty(decCookie.UserData))
                {
                    return;
                }
            }
        }

        HandleUnauthorizedRequest(filterContext);
    }

这就是我需要的,但是我可以将decCookie.UserData存储在可以在控制器操作中访问的某个地方吗?我做了一个扩展方法,它将在控制器中从请求中检索它,但它实际上只是属性已经完成的副本。

那么,有没有一种方法可以让我没有扩展方法,只需将UserData存储在某个地方以便稍后在属性中使用控制器?

1 个答案:

答案 0 :(得分:1)

使用自定义主体和标识,并在标识上存储您想要的任何数据。见MVC 3.0, Razor, Custom Principal and Identity。为了一个很好的介绍。只关注使用Application_AuthenticateRequest的内容,这就是Authorize属性的用途。