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