您的位置:首页 > 编程语言 > ASP

Asp.net mvc:使用ActionFilterAttribute记录操作日志

2016-08-26 10:05 1016 查看
1.ActionFilterAttribute的基本介绍:

引用命名空间:using system.web.mvc,这很重要,在system.web.Http.Filter下也有ActionFilterAttribute类,但有着很大的区别。

ActionFilterAttribute是Action过滤类,可在action执行之前,action执行之后,和提交操作结果之前和执行操作结果之后执行。

2.构造操作日志的类

public class OperateLog
{
/// <summary>
/// 主键Id
/// </summary>
[DisplayName("主键Id")]
public Guid Id { get; set; }
/// <summary>
/// 操作员Id
/// </summary>
[DisplayName("操作员Id")]
public Guid OperatorId { get; set; }
/// <summary>
/// 操作员
/// </summary>
[DisplayName("操作员")]
public Operator Operator { get; set; }
/// <summary>
/// 操作时间
/// </summary>
[DisplayName("操作时间")]
public DateTime OperateTime { get; set; }
/// <summary>
/// 具体操作
/// </summary>
[DisplayName("具体操作")]
public string Operate { get; set; }
/// <summary>
/// 重要级别
/// </summary>
[DisplayName("重要级别")]
public int Level { get; set; }
/// <summary>
/// 重要级别
/// </summary>
[NotMapped]
[DisplayName("重要级别")]
public ImportantLevel LevelEnum
{
get { return (ImportantLevel)Level; }
set { Level = (int)value; }
}
/// <summary>
/// 描述
/// </summary>
[DisplayName("描述")]
public string Description { get; set; }
/// <summary>
/// 重要级别
/// </summary>
public enum ImportantLevel { 一般操作 = 0, 危险操作 = 1 }
}


3.构造对应的ActionFilterAttribute类,实现方法OnActionExecuted()可在Action执行之后记录操作日志。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class OperationLogAttribute: ActionFilterAttribute
{
/// <summary>
/// 操作日志
/// </summary>
/// <param name="operate">具体操作</param>
public OperationLogAttribute(string operate,ImportantLevel level=ImportantLevel.一般操作 ,string description=null)
{
this.Operate = operate;
Level = level;
Description = description;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (Common.Common.CurrentUser == null) return;

AdministrativeSupervisionContext db = new AdministrativeSupervisionContext();
OperateLog operateLog = new OperateLog();
operateLog.Id = Guid.NewGuid();
operateLog.OperateTime = DateTime.Now;
operateLog.Operate = Operate;
operateLog.Description = Description;
operateLog.LevelEnum = Level;
operateLog.OperatorId = Common.Common.CurrentUser.Id;
db.OperateLogs.Add(operateLog);
db.SaveChanges();
base.OnActionExecuted(filterContext);
}

/// <summary>
/// 操作员Id
/// </summary>
public Guid OperatorId { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime OperateTime { get; set;  }
/// <summary>
/// 具体操作
/// </summary>
public string Operate { get; set; }
/// <summary>
/// 危险等级
/// </summary>
public ImportantLevel Level { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }

}


3.应用构造的ActionFilterAttribute类,在需要记录操作日志的Action之前加入即可。

[Attributes.OperationLog("删除日志",OperateLog.ImportantLevel.危险操作)]
public virtual async Task<ActionResult> DeleteConfirmed(Guid id)
{
try{
OperateLog operateLog = await db.OperateLogs.FindAsync(id);
db.OperateLogs.Remove(operateLog);
await db.SaveChangesAsync();
//return RedirectToAction("Index");
return Json(new JsonResultModel { Status = (int)JsonResultStatus.Success, Message = "删除成功" });
}catch{
return Json(new JsonResultModel { Status = (int)JsonResultStatus.Error, Message = "删除时发生错误" });
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net mvc