2013-01-31 32 views
1

断裂链我有2个动作过滤器:如何操作筛选

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

我需要设置CheckAttr的第一部作品,打破AuthAttr。

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

例如:

请求采取行动首页 - >第一部作品验证过滤器和逻辑我需要重定向到另一个动作

回答

1

你可以短路通过设置filterContextResult财产整个执行:

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

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

一旦分配了Result属性,将不会为此上下文执行更多过滤器。行动执行本身也将被短路。

还要记住,如果你的行动过滤器由同一类型派生没有保证的次序,除非你手动分配上他们每个人的Order财产将被执行。当然,如果它们是不同类型的,例如IAuthorizationFilterIActionFilter,很明显授权过滤器将在任何操作过滤器之前运行。这是设计。

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

+0

如何使用自定义消息将ActionExecutingContext设置为http 401错误? –

相关问题