访问控制器

时间:2015-06-01 22:11:24

标签: asp.net-mvc actionfilterattribute

我有一个日志记录操作过滤器,如果需要在使用自定义属性修饰的方法的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();
    }

0 个答案:

没有答案