Asp.net

.Net Web API - GetCookie() 返回空集合

  • August 29, 2017

我嘗試ApiController在後端 Web API 中讀取語言 cookie(我在客戶端上設置),如下所示:

var cookieHeaderValue = Request.Headers.GetCookies("lang").FirstOrDefault();

我的請求標頭如下所示: 在此處輸入圖像描述

也行

Request.Headers.GetCookies();

返回一個空集合…有人可以告訴我為什麼以及我可以做些什麼嗎?請幫忙

CookieHeaderValue 的解析會因為 ‘?’ 而失敗 在您的身份驗證 cookie 名稱中。嘗試刪除問號。

這是一種“完全手動”且非常醜陋的cookie提取方法:

   /// <summary>
   /// Retrieves an individual cookie from the cookies collection
   /// </summary>
   /// <param name="request"></param>
   /// <param name="cookieName"></param>
   /// <returns></returns>
   public static string GetCookie(HttpRequestMessage request, string cookieName)
   {
       //var vHeaders = request.Headers;
       //foreach (var vHeader in vHeaders)
       //    System.Diagnostics.Debug.WriteLine(vHeader.Key + " - " + vHeader.Value);

       var vCookies = request.Headers.Where(H => H.Key.ToLower() == "cookie");
       if (vCookies != null)
       {
           var vArrCookie = vCookies.FirstOrDefault().Value;
           if (vArrCookie != null)
           {
               var vCookiePair = 
                   vArrCookie.FirstOrDefault().Split(new char[] { ';' }).Where(C => C.Trim().StartsWith(cookieName)).FirstOrDefault();
               if (vCookiePair != null)
               {
                   //System.Diagnostics.Debug.WriteLine(vCookiePair);
                   var vCookie = vCookiePair.Trim().Substring(cookieName.Length + 1);
                   return vCookie;
               }
           }
       }

       // DID NOT WORK

       //CookieHeaderValue cookie = request.Headers.GetCookies(cookieName).FirstOrDefault();
       //if (cookie != null)
       //    return cookie[cookieName].Value;

       return null;
   }

將此方法添加到對 Web Api 控制器可見的基類或庫類中。

希望這會為您節省一些時間。

乾杯。

引用自:https://stackoverflow.com/questions/23239989