フィルタでRedirectを行う方法

ASP.NET MVC3でフィルタ内で処理を行いその結果、リダイレクトを行いたいことが結構あります。たとえば、認証の有無をチェックしたり、ユーザーごとに表示する画面を変更したりと…。そのときの処理の方法をメモします。

public void OnActionExecuting(ActionExecutingContext filterContext)
{
    // 認証チェックを行う
    HttpContext ctx = HttpContext.Current;
    if (ctx.Session == null || (ctx.Session != null && ctx.Session["loginId"] == null))
    {
        // ログイン画面へリダイレクト
        filterContext.Result = new RedirectResult("/Login");
        return;
    }
}

具体的には、8行目がその処理に該当するのですが、ActionExecutingContext.Result へリダイレクト先を指定することで元々呼び出されたアクションへの処理が中断され、即リダイレクト先へ処理が遷移するようになります。