0

我有一个自定义的授权属性,它基本上只是验证一个 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 存储在某个地方以供以后直接从属性中使用到控制器中?

4

1 回答 1

1

使用自定义主体和身份,并在身份上存储您想要的任何数据。请参阅MVC 3.0、Razor、自定义主体和身份。为了一个好的介绍。只需忽略有关 using的部分Application_AuthenticateRequest,这就是您的Authorize属性的用途。

于 2013-02-26T19:47:28.370 回答