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());
  } }
 

猜你喜欢

转载自blog.csdn.net/weixin_40184249/article/details/80220846