1. ホーム
  2. asp.net-mvc

フィルタを別のアクションにリダイレクトさせるには?

2023-07-20 13:58:02

質問

RedirectToAction は保護されており、アクションの中でのみ使用することができます。しかし、フィルタの中でリダイレクトしたい場合は?

public class IsGuestAttribute: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Ctx.User.IsGuest) 
            filterContext.Result = (filterContext.Controller as Controller)
                .RedirectToAction("Index", "Home");
    }
}

どのように解決するのですか?

RedirectToAction を構築するための単なるヘルパーメソッドです。 RedirectToRouteResult() を作成するためのヘルパーメソッドです。 RedirectToRouteResult() を渡すだけです。 RouteValueDictionary() をアクションの値で渡します。

下のコメントにある @Domenic のコードを基にした完全なサンプルです。

public class IsGuestAttribute: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Ctx.User.IsGuest) 
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary 
                { 
                    { "controller", "Home" }, 
                    { "action", "Index" } 
                });
        }
    }
}