如何打破行动链过滤器

本文关键字:过滤器 何打破 | 更新日期: 2023-09-27 17:56:45

我有 2 个操作过滤器:

[Auth]
[Check]
public ActionResult Home()
{
//...
}

我需要设置CheckAttr的第一个工作并打破AuthAttr。

我不记得该怎么做。请帮助我。

例:

请求采取行动 主页 ->第一个工作 身份验证过滤器和逻辑 我需要重定向到另一个操作

如何打破行动链过滤器

您可以通过设置filterContextResult 属性来缩短整个执行:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    filterContext.Result = new JsonResult
    {
        Data = "hello",
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };
}

在这个例子中,我返回了一个JsonResult,但你可以返回任何你喜欢的ActionResult:ViewResult,PartialViewResult,RedirectToRouteResult,...

分配 Result 属性后,不会再为此上下文执行筛选器。动作执行本身也会短路。

另请记住,如果操作筛选器派生自同一类型,则无法保证它们的执行顺序,除非您在每个筛选器上手动分配 Order 属性。当然,如果它们属于不同的类型,例如 IAuthorizationFilterIActionFilter ,很明显,授权过滤器将在任何操作过滤器之前运行。这是设计使然。

另一方面,如果您只是尝试阻止其他操作过滤器执行,但操作本身应该执行,恐怕没有办法实现这一目标,您将不得不重新考虑这些过滤器的设计。