2017-03-05 68 views
0

我已經創建了一個全新的ASP.Net 4.6 MVC項目,並試圖在請求Cookie集合中設置一個值並在下一個請求中檢索它。我正在使用Cookie,因爲Application_BeginRequest方法中尚未提供Session。使用下面的代碼,我要求的cookie值在我所做的每個請求中都是null,儘管它設置了它。設置cookie不會在Web請求之間持續

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; 
    } 
} 

我在做什麼錯?我見過的所有關於cookies的帖子都顯示了以這種方式設置/獲取它們,其中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

我最終通過設置我的Cookie與響應而不是請求來修復它。在下一次請求中,Cookie值可供我使用。謝謝你 –

+0

打到Application_BeginRequest後,它應該去Application_AcquireRequestState –