2010-07-01 67 views
4

隨意關閉這個如果它是重複的。我找不到答案。如何使用ActionFilter中斷/攔截MVC操作?

我希望能夠將一個System.Web.ActionFilterAttribute放在一個操作方法上,並覆蓋OnActionExecuting方法來插入確定是否應該實現Action的業務邏輯。

能否ActionExecutingContext用於取消執行操作方法,並執行下列操作之一:

  • 發送一個HTTP狀態代碼(以及相應的<customError>頁)。
  • 在同一控制器內執行不同的操作方法。

回答

2

發送的HTTP狀態代碼(以及 對應<customError>頁)

幾乎:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    filterContext.HttpContext.Response.StatusCode = 500; 
} 

內的相同執行不同的處理法 控制器。

是:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    filterContext.Result = new ViewResult() { ViewName = "SomeOtherAction" }; 
} 
+0

我不認爲你的答案的後半部分是正確的。這隻會返回一個不同的觀點,而不是執行該操作。 – Ryan 2010-07-02 02:16:12

+0

'filterContext.Result = new RedirectToRouteResult(...)'' – 2012-08-15 20:08:50

1

你總是可以重定向到一個動作過濾器另一個控制器/行動。

查看here舉例。