微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net mvc添加到AUTHORIZE属性

如何创建自定义属性以扩展MVC中的现有Authorize属性

解决方法

从AuthorizeAttribute导出你的类.覆盖OnAuthorization方法.添加并设置CacheValidationHandler.
public void CacheValidationHandler( HttpContext context,object data,ref HttpValidationStatus validationStatus )
{
    validationStatus = OnCacheAuthorization( new HttpContextwrapper( context ) );
}


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

    if (AuthorizeCore( filterContext.HttpContext ))
    {
       ... your custom code ...
       SetCachePolicy( filterContext );
    }
    else if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
    {
        // auth Failed,redirect to login page
        filterContext.Result = new HttpUnauthorizedResult();
    }
    else
    {
       ... handle a different case than not authenticated
    }
}


protected void SetCachePolicy( AuthorizationContext filterContext )
 {
     // ** IMPORTANT **
     // Since we're performing authorization at the action level,the authorization code runs
     // after the output caching module. In the worst case this Could allow an authorized user
     // to cause the page to be cached,then an unauthorized user would later be served the
     // cached page. We work around this by telling proxies not to cache the sensitive page,// then we hook our custom authorization code into the caching mechanism so that we have
     // the final say on whether a page should be served from the cache.
     HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
     cachePolicy.SetProxyMaxAge( new TimeSpan( 0 ) );
     cachePolicy.AddValidationCallback( CacheValidationHandler,null /* data */);
 }

原文地址:https://www.jb51.cc/aspnet/249895.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐