如何打破行动链过滤器

时间:2013-01-31 13:55:27

标签: c# asp.net-mvc action-filter

我有2个动作过滤器:

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

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

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

示例:

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

1 个答案:

答案 0 :(得分:1)

您可以通过设置filterContext的{​​{3}}属性来缩短整个执行时间:

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

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

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

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

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