如何打破行动链过滤器
本文关键字:过滤器 何打破 | 更新日期: 2023-09-27 17:56:45
我有 2 个操作过滤器:
[Auth]
[Check]
public ActionResult Home()
{
//...
}
我需要设置CheckAttr的第一个工作并打破AuthAttr。
我不记得该怎么做。请帮助我。
例:
请求采取行动 主页 ->第一个工作 身份验证过滤器和逻辑 我需要重定向到另一个操作
您可以通过设置filterContext
的 Result
属性来缩短整个执行:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Result = new JsonResult
{
Data = "hello",
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
在这个例子中,我返回了一个JsonResult,但你可以返回任何你喜欢的ActionResult:ViewResult,PartialViewResult,RedirectToRouteResult,...
分配 Result 属性后,不会再为此上下文执行筛选器。动作执行本身也会短路。
另请记住,如果操作筛选器派生自同一类型,则无法保证它们的执行顺序,除非您在每个筛选器上手动分配 Order
属性。当然,如果它们属于不同的类型,例如 IAuthorizationFilter
或 IActionFilter
,很明显,授权过滤器将在任何操作过滤器之前运行。这是设计使然。
另一方面,如果您只是尝试阻止其他操作过滤器执行,但操作本身应该执行,恐怕没有办法实现这一目标,您将不得不重新考虑这些过滤器的设计。