Asp.Net MVC 4 - ActionFilterAttribute用法

问题描述 投票:1回答:2

我为应用程序日志编写了此代码(CustomHandle)。但是,我不想在某些操作上运行此代码。

CustomHandle.cs:

public class CustomHandle: ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        var controllerName = (string)filterContext.RouteData.Values["controller"];
        var actionName = (string)filterContext.RouteData.Values["action"];
        string FormVeri = "";
        string QueryVeri = "";
        foreach (var fName in filterContext.HttpContext.Request.Form)
        {
            FormVeri += fName + "= " + filterContext.HttpContext.Request.Form[fName.ToString()].ToString() + "& ";
        }
        foreach (var fQuery in filterContext.HttpContext.Request.QueryString)
        {
            QueryVeri += fQuery + "= " + filterContext.HttpContext.Request.QueryString[fQuery.ToString()] + "& ";
        }

        base.OnResultExecuted(filterContext);
    }
}

FilterConfig.cs:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CustomHandle());
    }
}

HomeController.cs:

public ActionResult Index()
{
    return View();
}

public ActionResult Login()
{
    return View();
}

CustomHandle适用于索引和登录。但是,CustomHandle是我不希望在Login ActionResult上运行。

谢谢, 最好的祝福。

asp.net asp.net-mvc asp.net-mvc-4 filtering handle
2个回答
2
投票

在MVC 5中...而不是在FilterConfig.cs中添加动作过滤器

  • 将其添加到每个Controller(或基本控制器) - 所有操作都将受到影响。
  • 使用[OverrideActionFilter]删除特定操作的过滤器。

    [CustomHandle]
    public class AnyController : Controller
    {
        public ActionResult Index()      // has [CustomHandle] attribute
        {
        }

        [OverrideActionFilter]
        public ActionResult Login()      // ignores the [CustomHandle] attribute
        {
        }
    }

0
投票

将过滤器注入控制器类时,也会注入其所有操作。如果您只想对一组操作应用过滤器,则必须为每个操作注入[CustomActionFilter]:

[CustomHandle]
public ActionResult Index()
{
  ...
}

public ActionResult Login()
{
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.