2

我有 2 个动作过滤器:

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

我需要首先设置 CheckAttr 并打破 AuthAttr。

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

例子:

请求操作主页 - > 第一项工作 Auth 过滤器和我需要重定向到另一个操作的逻辑

4

1 回答 1

3

Result您可以通过设置以下属性来短路整个执行filterContext

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

在此示例中,我返回了 JsonResult,但您可以返回任何您喜欢的 ActionResult:ViewResult、PartialViewResult、RedirectToRouteResult、...

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

还要记住,如果您的操作过滤器是从同一类型派生的,则无法保证它们将按什么顺序执行,除非您手动为Order每个过滤器分配属性。当然,如果它们是不同的类型,例如IAuthorizationFilteror IActionFilter,很明显授权过滤器将在任何操作过滤器之前运行。这是设计使然。

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

于 2013-01-31T14:04:10.060 回答