2

Cookie が有効かどうかをチェックするカスタム アクション フィルタを開発しようとしていました。Cookie が有効になっていない場合は、使用を特定のエラー ページにリダイレクトします。これが私のコードです。

public class CheckCookieAttribute : FilterAttribute, IActionFilter
    {

       public string prmAction{get;set;}

       public string prmController{get;set;}


        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
        if(filterContext.HttpContext.Request.Cookie["YourCookie"]==null)
        {
            filterContext.Result = controller.RedirectToAction(prmAction,prmController)
        }
        }

        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            //The action filter logic - after
        }
    }

今私はのように使用しています

[CheckCookie(prmAction="MyAction",prmController="MyController")]

十分な知識が不足しているため、Cookie を有効または無効にするための属性駆動型チェックを開発できません。

結果として、コントローラー名またはアクション名を渡してはならないような方法でコードを開発したい。私は次のようなコードを使用するのが好きです

[HttpPost]
 [CheckCookieAttribute]
 public ActionResult Save(Person oPerson)
 {
        return View();
 }

[CheckCookieAttribute]
public class HomeController : Controller
{
public ActionResult Index()
{return View();}

public ActionResult About()
{return View();}
}
}

ここで、コントローラーの名前やアクション名は提供しません。コードで何を変更する必要があるかを教えてください。ありがとう

4

1 に答える 1

3

あなたが達成しようとしているものは、すでに ASP.NET MVC に組み込まれているようです。

ユーザーが_クッキーがあります。

ユーザーが承認されていないときにユーザーを特定のコントローラー/アクションにリダイレクトする場合は、代わりに次の属性を使用できます。

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new
                    {
                        controller = "Error",
                        action = "Unauthorized"
                    })
                );
    }
}

ASP.NET MVC 4 カスタム認証属性とアクセス許可コード (ロールなし) を参照してください。

次に、次を使用して使用します。

[HttpPost]
[AuthorizeUser]
public ActionResult Save(Person oPerson)
{
    return View();
}

または、あなたが求めたものとまったく同じものが欲しい場合は、次のようにすることができます:

public class CheckCookieAttribute : ActionFilterAttribute, IActionFilter
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Request.Cookies["YourCookie"] == null)
            {                                
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { {"controller", "MyController"}, {"action", "MyAction"}});                
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }
        }

        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            //The action filter logic - after
        }
    }
于 2013-09-24T13:21:55.143 に答える