2012-02-10 87 views
2

如果我在這個方法中寫一個ActionFilter這樣HttpContext.Current VS ActionExecutingContext

public override void OnActionExecuting(ActionExecutingContext filterContext) 

,我也可以通過HttpContext.Current可以訪問當前上下文。我只是想知道這兩種情況有什麼區別?

回答

3

從過濾器上的article

當你實現OnActionExecuted方法,你最終會 接收類型ResultExecutedContext的一個實例。除了讓 你訪問currentControllerContext,你還將獲得 屬性

  • 得到的ActionResult(屬性Result)負責生成響應返回給客戶端;

  • 看看處理是否被取消(例如,當您在OnActionExecuting方法中設置ActionExecuting上下文的Result屬性時)。您可以從Canceled屬性中獲取此信息;

  • 獲得對在處理過程中可能產生的異常的引用(正如您可能預料的那樣,這是通過Exception屬性可用的 );

  • 指示您已處理異常(屬性ExceptionHandled)。

...的ResultExecutingContext從 ActionExecutingContext我們已經談到了一點不同。如果您構建其中一個 過濾器,然後,您可以通過在OnResultExecuting方法中將取消 屬性設置爲true來取消進一步處理。請注意, 發生這種情況時,您的視圖將不會被調用,並且您最終不會生成通常發送回客戶端的HTML(我假設一個簡單的案例,您有一個可生成HTML的視圖的 )。作爲 我們會看到,您也可以有一個生成JSON的視圖...)。

相關問題