基本的には、Cookie がリクエストと共に送信され、それに値が割り当てられていることを単純に検証する、カスタムの authorize 属性があります。
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 をどこかに保存する方法はありますか?