demo20230512/Filter/MvcLogAttribute.cs
2023-05-12 10:20:28 +08:00

58 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Weee.Filter
{
public class MvcLogAttribute : ActionFilterAttribute, IActionFilter
{
private string _ActionDisplayName;
private string _ModuleDisplayName;
public MvcLogAttribute(string ActionDisplayName = null,string ModuleDisplayName=null)
{
_ActionDisplayName = ActionDisplayName;
_ModuleDisplayName = ModuleDisplayName;
}
public Weee.DAL.WeeeDataContext db { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var user = ((Controller)filterContext.Controller).ModelState["Username"] == null ?
filterContext.HttpContext.User == null ?
"" :
filterContext.HttpContext.User.Identity.Name :
((Controller)filterContext.Controller).ModelState["Username"].Value.AttemptedValue;
String message =
String.Format(
"Method=[{0}] ,User=[{1}], Action=[{2}], Controller=[{3}], IPAddress=[{4}]" +
"TimeStamp=[{5}]",
"OnActionExecuted",
user,
_ActionDisplayName??filterContext.ActionDescriptor.ActionName,
_ModuleDisplayName??filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
filterContext.HttpContext.Request.UserHostAddress,
DateTime.Now);
System.Diagnostics.Debug.WriteLine(message);
var log = new Weee.Models.ActionLog()
{
Name = user,
Action = _ActionDisplayName??filterContext.ActionDescriptor.ActionName,
Controller = _ModuleDisplayName??filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
IP = filterContext.HttpContext.Request.UserHostAddress,
ActionTime = DateTime.Now,
ExecuteResult =
filterContext.Exception == null ? ((Controller)filterContext.Controller).ModelState.IsValid?
"success":"fail" : "exception: " + filterContext.Exception.Message + "\nstacktrace: "
+ filterContext.Exception.StackTrace
};
db.ActionLogs.Add(log);
db.SaveChanges();
base.OnActionExecuted(filterContext);
}
}
}