我有一个自定义授权属性,它基本上只是验证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存储在某个地方以便稍后在属性中使用控制器?
答案 0 :(得分:1)
使用自定义主体和标识,并在标识上存储您想要的任何数据。见MVC 3.0, Razor, Custom Principal and Identity。为了一个很好的介绍。只关注使用Application_AuthenticateRequest
的内容,这就是Authorize
属性的用途。