自定义授权属性 - 以后可以存储值吗?
问题描述:
我有一个自定义的授权属性,基本上只是验证一个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存储在某个地方,以便以后在控制器中直接使用该属性?
答
使用自定义主体和身份,并存储您想要的身份数据。请参阅MVC 3.0, Razor, Custom Principal and Identity。为了一个好的介绍。只是忽略了使用Application_AuthenticateRequest
这一点,这就是你的Authorize
属性。
这是完美的谢谢! – Zholen 2013-02-26 20:33:46