行为过滤器(ActionAttribute)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MyZ.Web.Models;
namespace MyZ.Web.Attributes
{
public class ActionAttribute : ActionFilterAttribute //行为过滤器
{
/// <summary>
/// 调用控制器对应的Action方法之后的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (AdminContext.context.adminUser != null)
{
//获取用户名
string username = AdminContext.context.adminUser.UserName;
string controller = filterContext.RouteData.Values["Controller"].ToString();
string action = filterContext.RouteData.Values["Action"].ToString();
//获取系统的日志
string msg = $"时间:{DateTime.Now},用户名:{username},已完成控制器:{controller},页面:{action}";
//获取文件路径
string path = "D:\\lj.txt";
File.AppendAllText(path, msg);
}
}
/// <summary>
/// 调用控制器对应的Action方法之前的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (AdminContext.context.adminUser != null)
{
string username = AdminContext.context.adminUser.UserName;
string controller = filterContext.RouteData.Values["Controller"].ToString();
string action = filterContext.RouteData.Values["Action"].ToString();
//获取系统的日志
string msg = $"时间:{DateTime.Now},用户名:{username},正在操作控制器:{controller},页面:{action}";
//获取文件路径
string path = "D:\\Exception.txt";
File.AppendAllText(path, msg);
}
//获取用户名
}
/// <summary>
/// 调用控制器对应的Action方法之后页面渲染之后的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
}
/// <summary>
/// 调用控制器对应的Action方法之后页面渲染之前的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
}
}
}
异常过滤器(ExceptionAttribute)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MyZ.Web.Attributes
{
public class ExceptionAttribute : HandleErrorAttribute //异常过滤器
{
/// <summary>
/// 系统发生异常的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnException(ExceptionContext filterContext)
{
//Exception exception = filterContext.Exception;
//string msg = exception.Message;
//获取系统的日志
string exception = filterContext.Exception.ToString();
string msg = $"时间:{DateTime.Now},系统出错:{exception}";
//获取文件路径
string path = "D:\\Exception.txt";
//如果文件不存在则创建
/*if (!File.Exists(path))
{
File.Create(path);
}*/
File.AppendAllText(path, msg);
}
}
}
权限过滤器(PermissionAttribute)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using MyZ.Web.Models;
namespace MyZ.Web.Attributes
{
public class PermissionAttribute : AuthorizeAttribute //权限过滤器
{
/// <summary>
/// 判断认证是否通过
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//如果上下文不为空
if (AdminContext.context.adminUser != null && httpContext.Session != null)
{
return true;
}
return false;
}
/// <summary>
///认证不通过的时候所做的操作
/// </summary>
/// <param name="filterContext"></param>
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
//获取用户请求的地址
string path = filterContext.HttpContext.Request.Path;
//自定义路由跳转
Dictionary<string, object> keys = new Dictionary<string, object>();
keys.Add("Controller", "Home");
keys.Add("Action", "Login");
keys.Add("ReturnUrl", path);
var routeValue = new RouteValueDictionary(keys);
//根据指定路由跳转
filterContext.Result = new RedirectToRouteResult(routeValue);
}
}
}