Asp.Net MVC 4 - ActionFilterAttribute 用法
Asp.Net MVC 4 - ActionFilterAttribute Usage
我为应用程序日志编写了这段代码 (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 适用于 Index 和 Login。但是,CustomHandle 是我不希望在 Login ActionResult.
上 运行
谢谢,
最好的问候。
当过滤器被注入控制器时 class,它的所有动作也被注入。如果您只想对一组操作应用过滤器,则必须为每个操作注入 [CustomActionFilter]:
[CustomHandle]
public ActionResult Index()
{
...
}
public ActionResult Login()
{
...
}
在 MVC 5 中...而不是在 FilterConfig.cs
中添加操作过滤器
- 将其添加到每个控制器(或基本控制器) - 所有操作都会受到影响。
- 使用 [OverrideActionFilter] 删除特定操作的过滤器。
示例
[CustomHandle]
public class AnyController : Controller
{
public ActionResult Index() // has [CustomHandle] attribute
{
}
[OverrideActionFilter]
public ActionResult Login() // ignores the [CustomHandle] attribute
{
}
}
我为应用程序日志编写了这段代码 (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 适用于 Index 和 Login。但是,CustomHandle 是我不希望在 Login ActionResult.
谢谢,
最好的问候。
当过滤器被注入控制器时 class,它的所有动作也被注入。如果您只想对一组操作应用过滤器,则必须为每个操作注入 [CustomActionFilter]:
[CustomHandle]
public ActionResult Index()
{
...
}
public ActionResult Login()
{
...
}
在 MVC 5 中...而不是在 FilterConfig.cs
中添加操作过滤器- 将其添加到每个控制器(或基本控制器) - 所有操作都会受到影响。
- 使用 [OverrideActionFilter] 删除特定操作的过滤器。
示例
[CustomHandle]
public class AnyController : Controller
{
public ActionResult Index() // has [CustomHandle] attribute
{
}
[OverrideActionFilter]
public ActionResult Login() // ignores the [CustomHandle] attribute
{
}
}