首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

构造函数不实施,求教!

2013-06-19 
构造函数不执行,求教!!![AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultip

构造函数不执行,求教!!!
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public class myAuthorize : AuthorizeAttribute
    {
        private readonly bool _authorize;
        private bool _isPermissionFail = false;
        public myAuthorize() {
            string test = "断点";//在这里设置断点,F5调试时,并未进入这一步
            if (HttpContext.Current.User.Identity.Name != "")
            {
                _authorize = true;
            }
            else
            {
                _authorize = false;
            }
        }
        public myAuthorize(string permission)
        {
            string test = "断点";//在这里设置断点,,F5调试时,并未进入这一步
            if (HttpContext.Current.User.Identity.Name != "")
            {
               
                _authorize = PermissionManager.CheckUserHasPermision(HttpContext.Current.User.Identity.Name, permission);
                if (_authorize == false)
                {
                    _isPermissionFail = true;
                }
            }
            else
            {
                _authorize = false;
            }
        }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return _authorize;
        }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //F5调试发现,程序直接跳过构造函数,执行到这里了


            base.OnAuthorization(filterContext);
            if (filterContext.HttpContext.Response.StatusCode == 403)
            {
                filterContext.Result = new RedirectResult("/Admin/Home/PermissionError");
            }
        } 
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (_isPermissionFail)
            {
                filterContext.HttpContext.Response.Redirect("/Admin/Home/PermissionError");
            }
            else
            {
                //base.HandleUnauthorizedRequest(filterContext);
                filterContext.HttpContext.Response.RedirectToRoute(new {Area="Admin",Controller="Home",Action="Login" });
            }

        }
    }
还望各位大侠不吝赐教!!! 调试 属性类 MVC4 类构造函数不执行 MVC4自定义权限设置
[解决办法]
他应该执行的是AuthorizeAttribute里面的构造方法,然后触发了OnAuthorization
[解决办法]
你是否正确调用了myAuthorize 该类,而不是直接写的AuthorizeAttribute

 [myAuthorize]
        public ActionResult Index()
        {
            ViewBag.Message = "欢迎使用 ASP.NET MVC!";
            return View();
        }
       

[解决办法]
楼主对 Attribute 的类误用了,它是对应于 class 类的,而不是实例,大约等于静态变量吧。
所以它只会生成一次,因为你只对一个 class 使用这个 Attribute。
它的典型用法是在反射 class 的时候,可以获取它。
[解决办法]
从 AuthorizeAttribute 派生

如果要从 AuthorizeAttribute 类派生,则派生的类型必须是线程安全的。 因此,不要在类型实例本身中(例如,在实例字段中)存储状态(除非该状态要应用于所有请求), 而应在 Items 属性中按请求存储状态,该属性可通过传递给 AuthorizeAttribute 的上下文对象进行访问。 



必须是线程安全??这个是什么概念呢~
不知道附加了什么特殊的东西~?

热点排行