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