我有一个日志记录操作过滤器,如果需要在使用自定义属性修饰的方法的OnActionExecuting事件上执行日志记录。此过滤器是全局声明的。
public class LoggerFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
PerformLoggingIfNecessary(filterContext);
base.OnActionExecuting(filterContext);
}
private static void PerformLoggingIfNecessary(ActionExecutingContext filterContext)
{
var allAttributes = filterContext.ActionDescriptor.GetCustomAttributes(false);
CustomAttribute myAttribute = (CustomAttribute)allAttributes .FirstOrDefault(a => a.GetType() == typeof(CustomAttribute));
if (myAttribute != null)
{
LogClass myLog = BuildLogClass(filterContext);
Logger.Log(myLog);
}
}
}
使用" CustomAttribute" attribute,然后创建一个日志,其中包含分配给CustomAttribute的属性以及从ActionExecutingContext获取的属性,例如ControllerName,ActionName或ActionParameters。如果没有修饰此类操作,则不执行日志记录(尽管触发了LoggerFilter的OnActionExecuting)。
但是,此记录始终发生,与动作上收到的模型无关。我想要做的是验证收到的模型,如果成功,执行日志记录。即。
[CustomAttribute (ParameterOne, ParameterTwo)]
public ActionResult MyAction(MyModel someModel)
{
if(someModel.Verify()){ //I cannot use ModelState.IsValid
//Call the OnActionExecuting to perform logging
//DO SOMETHING
}
//DO NOT LOG
return View();
}