我有2个动作过滤器:
[Auth]
[Check]
public ActionResult Home()
{
//...
}
我需要先设置CheckAttr工作并打破AuthAttr。
我不记得怎么做了。请帮帮我。
示例:
请求采取行动主页 - >第一个工作Auth过滤器和逻辑我需要重定向到另一个动作
答案 0 :(得分:1)
您可以通过设置filterContext
的{{3}}属性来缩短整个执行时间:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Result = new JsonResult
{
Data = "hello",
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
在这个例子中,我返回了一个JsonResult但你可以返回你喜欢的任何ActionResult:ViewResult,PartialViewResult,RedirectToRouteResult,...
分配Result属性后,不会再为此上下文执行过滤器。行动执行本身也将被短路。
另外请记住,如果您的动作过滤器是从相同类型派生的,则无法保证它们将以何种顺序执行,除非您手动为每个类型分配Order
属性。当然,如果它们属于IAuthorizationFilter
或IActionFilter
等不同类型,很明显授权过滤器会在任何操作过滤器之前运行。这是设计的。
另一方面,如果您只是试图阻止其他动作过滤器执行但行动本身应该执行,我担心没有办法实现这一点,您将不得不重新考虑这些过滤器的设计。