2016-04-27 73 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; 
}