[ASP.NET MVC]利用ActionFilter過濾Request

SONY DSC

在 ASP.NET MVC 中,通常會有對某些 Controller 底下的 Action 做 log 或是過濾 Request 的需求,而 ActionFilter 可以滿足這樣的需求,它是一個 Attribute,實作它之後只要宣告在 Action 上即可。

ActionFilter 有四個 method,分別是 OnActionExecuted、OnActionExecuting、OnResultExecuted、OnResultExecuting,而它的執行順序則是:

  1. OnActionExecuting
  2. Controller’s action
  3. OnActionExecuted
  4. OnResultExecuting
  5. View binding
  6. OnResultExecuted

假設今天我要在某個 Action 中檢查 request 是否為 POST,是的話在 TempData 中塞資料,否則導回首頁,那程式碼可以這樣寫:

public class TokenValidationActionAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Request.HttpMethod == HttpMethods.POST)
        {
            filterContext.Controller.TempData["aaa3"] = "aaa3";
        }

        UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
        filterContext.Result = new RedirectResult(urlHelper.Action("About", "Home"));
    }

}

實作之後,宣告在 Action 上方:

[TokenValidationAction]
public ActionResult TestAction()

很簡單卻很實用的 Attribute。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s