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