2016-04-27 91 views
3

我正在將Web窗體應用程序轉換爲asp.net核心mvc。在我的Web表單應用程序中,有時在我設置了一些響應cookie後,其他代碼需要查看它們是否已設置,如果是,請訪問cookie的屬性(即值,Expires,Secure,http)。在WebForms和MVC 5有可能遍歷餅乾和返回任何特定的餅乾,像這樣(老同學,我知道)如何在Asp.net Core MVC(aka Asp.Net 5 RC1)中檢查響應cookie?

 for(int i = 0; i < cookies.Count; i++) { 
      if(cookies[i].Name == cookieName) { 
       return cookies[i]; 
      } 
     } 

但在asp.net mvc的核心訪問響應cookie的界面看起來是這樣的:

response cookies interface

基於該接口的,我不明白的方式進行檢查,看是否有響應cookie存在並獲得它的屬性。但是有什麼辦法可以做到嗎?

在一個操作方法中,我嘗試在響應對象上設置兩個cookie,然後立即嘗試訪問它們。但智能感知不顯示任何方法,屬性或索引,讓我來訪問它們:

enter image description here

有那麼一刻,我想也許我可以用Response.Cookies.ToString();,只是解析信息來找到我的餅乾信息,但唉,ToString()調用返回「Microsoft.AspNet.Http.Internal.ResponseCookies」,因爲該對象不覆蓋默認實現。

爲了好玩,我還檢查了GitHub的當前開發分支,看看自RC1以來界面是否發生了變化,但它沒有。所以給定這個接口,我該如何檢查響應cookie的存在並獲取它的屬性?我想過試圖通過響應標頭集合進行攻擊,但這看起來很蹩腳。

+0

您是否在您的操作方法中嘗試了'Response.Cookies'? –

+0

我有。我會更新這個問題來表明這一點。 –

+0

哦,對不起。我的意思是'Request.Cookies',我的錯誤! –

回答

1

以下是我從Response獲取Cookie的value的方法。如果需要,可以使用類似這樣的方式來獲取整個cookie:

string GetCookieValueFromResponse(HttpResponse response, string cookieName) 
{ 
    foreach (var headers in response.Headers.Values) 
    foreach (var header in headers) 
     if (header.StartsWith(cookieName)) 
     { 
     var p1 = header.IndexOf('='); 
     var p2 = header.IndexOf(';'); 
     return header.Substring(p1 + 1, p2 - p1 - 1); 
     } 
    return null; 
}