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