• ASP.NET MVC 中Filter过滤器的使用和注册


    一、AuthorizeAttribute

    {
        /// <summary>
        /// 允许
        /// </summary>
        public class HasPermissionAttribute : AuthorizeAttribute //Authorize授权特性
        {
            private string _str = "";
            private string _errorMsg = "出错了";
            public HasPermissionAttribute(Type str)
                : this(str.ToString())
            {
    
            }
            public HasPermissionAttribute(string str)
            {
                _str = str;
            }
    
    
            /// <summary>
            /// 重写时,提供一个入口点用于进行自定义授权检查【入口点】。
            /// </summary>
            /// <param name="httpContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
            /// <returns>如果用户已经过授权,则为 true;否则为 false。</returns>
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                
                bool result = false;
                if (HttpContext.Current == null) return result = false;
                if (!HttpContext.Current.User.Identity.IsAuthenticated) return result = false;
                string myid = HttpContext.Current.User.Identity.Name;
    
                //逻辑判断,判断用户是否对栏目有操作权
                if (myid == _str)
                {
                    result = true;
                }
    
                return result;
            }
    
            /// <summary>
            /// 处理授权失败的 HTTP 请求。
            /// </summary>
            /// <param name="filterContext">封装用于 System.Web.Mvc.AuthorizeAttribute 的信息。 filterContext 对象包括控制器、HTTP 上下文、请求上下文、操作结果和路由数据。</param>
            protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
            {
                //异步请求
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                    filterContext.Result = new JsonResult()
                    {
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        Data = new
                        {
                            ErrorType = this.GetType().Name,
                            Action = filterContext.ActionDescriptor.ActionName,
                            Message = _errorMsg
                        }
                    };
                }
                else
                {
                    string MyAuthError = ConfigurationManager.AppSettings["MyAdminAuthErrorUrl"];// +@"?returnUrl=" + myolurl;
                    filterContext.Result = new RedirectResult(MyAuthError);
                }
            }
        }
    }

    二、ActionFilterAttribute(Action和Result)

        public class CustomerFilterAttribute : ActionFilterAttribute  
          {  
          
              public override void OnActionExecuting(ActionExecutingContext filterContext)  
              {  
                  base.OnActionExecuting(filterContext);  
                  filterContext.HttpContext.Response.Write("开始时间:"+DateTime.Now.ToString()+"<br/>");  
              }  
          
              public override void OnActionExecuted(ActionExecutedContext filterContext)  
              {  
                  base.OnActionExecuted(filterContext);  
                  var controllerName = filterContext.RouteData.Values["controller"].ToString();  
                  var actionName = filterContext.RouteData.Values["action"].ToString();  
          
                  filterContext.HttpContext.Response.Write("结束时间:" + DateTime.Now.ToString() + "<br/>");  
                  filterContext.HttpContext.Response.Write("controller:" +controllerName+",action:"+actionName);  
              }  
          }  
    

    三、HandleErrorAttribute

        public class MyExceptionAttribute : HandleErrorAttribute
        {
            public static Queue<Exception> ExecptionQueue = new Queue<Exception>();
            /// <summary>
            /// 可以捕获异常数据
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnException(ExceptionContext filterContext)
            {
              
                base.OnException(filterContext);
                Exception ex = filterContext.Exception;
                //写到队列
                ExecptionQueue.Enqueue(ex);
                //跳转到错误页面.
                filterContext.HttpContext.Response.Redirect("/Error.html");
            }
        }

    四、注册

     public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
               
               // filters.Add(new HandleErrorAttribute());
                
                filters.Add(new HasPermissionAttribute());
                filters.Add(new CustomerFilterAttribute());
    
              filters.Add(new MyExceptionAttribute());
      } }
    
    
  • 相关阅读:
    vue-cli 打包编译 -webkit-box-orient: vertical 被删除解决办法
    vue静态文件处理
    vue项目关闭eslint检查
    Mac 桌面软件开发基础问答
    Mac App开发
    mac os app 开发
    ffmpeg学习目录收集
    vue中html模板使用绑定的全局函数
    软件版本标识
    shell之ulimit应该注意的事项
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752419.html
Copyright © 2020-2023  润新知