2017-03-05 17 views
0

新しいASP.Net 4.6 MVCプロジェクトを作成し、リクエストクッキーコレクションに値を設定して次のリクエストで値を取得しようとしました。 SessionはまだApplication_BeginRequestの方法では利用できないので、私はクッキーを使用しています。次のコードを使用して、私が要求するCookieの値は、設定したにもかかわらず、すべての要求でnullです。ウェブリクエスト間にクッキーを設定しない

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

    protected void Application_BeginRequest() 
    { 
     var cookie = this.Request.Cookies.Get("Foo"); 
     string value = cookie?.Value; 

     if (string.IsNullOrEmpty(value)) 
     { 
      cookie = new HttpCookie("Foo", "Bar"); 
      cookie.Expires = System.DateTime.UtcNow.AddHours(1); 
      this.Request.Cookies.Add(cookie); 
     } 
    } 

    protected void Application_EndRequest() 
    { 
     var cookie = this.Request.Cookies.Get("Foo"); 
     string value = cookie?.Value; 
    } 
} 

私は間違っていますか?クッキーに関する私が見た投稿のすべては、Request.Cookies.Get/Request.Cookies.Addという形で設定/取得しています。

答えて

1

あなたが要求ごとに状態を取得したい場合、あなたはあなたのApplication_AcquireRequestState実装があるべきApplication_AcquireRequestState

で行う必要があります:

protected void Application_AcquireRequestState(object sender, EventArgs e) 
    { 
     var cookie = this.Request.Cookies.Get("Foo"); 
     string value = cookie?.Value; 

     if (string.IsNullOrEmpty(value)) 
     { 
      cookie = new HttpCookie("Foo", "Bar"); 
      cookie.Expires = System.DateTime.UtcNow.AddHours(1); 
      this.Request.Cookies.Add(cookie); 
     } 
    } 
+0

私はそれを試してみましたが、それがヒットしませんでした。私はブレークポイントを設定し、VSはその方法で壊れることはありません。 –

+0

リクエストの代わりにレスポンスを使ってクッキーを設定することで修正しました。次回のリクエストでは、クッキーの値が私のために利用可能でした。ありがとうtho –

+0

Application_BeginRequestを打った後、それはApplication_AcquireRequestStateに行く必要があります –

関連する問題