2013-01-31 57 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錯誤? –

相關問題