我正在将一个Web表单应用程序转换为asp.net core mvc.在我的Web表单应用程序中,有时在我设置一些响应cookie后,其他代码需要查看它们是否已设置,如果是,请访问cookie的属性(即value,Expires,Secure,http).在webforms和MVC 5中,可以迭代cookie并返回任何特定的cookie,如此(我知道的老学校)
for(int i = 0; i < cookies.Count; i++) { if(cookies[i].Name == cookieName) { return cookies[i]; } }
但是在asp.net core mvc中访问响应cookie的界面如下所示:
基于此接口,我没有看到检查响应cookie是否存在并获取其属性的方法.但是还有一些方法可以做到吗?
在一个动作方法中,我尝试在响应对象上设置两个cookie,然后立即尝试访问它们.但intellisense没有显示允许我访问它们的任何方法,属性或索引器:
有一会儿,我想也许我可以使用Response.Cookies.ToString();并且只是解析信息以找到我的cookie信息,但是,ToString()调用返回“Microsoft.AspNet.Http.Internal.ResponseCookies”,因为该对象不会覆盖默认实现.
只是为了好玩,我还检查了GitHub的当前dev分支,看看自RC1以来接口是否已经改变,但它没有.所以给定这个接口,我如何检查响应cookie的存在并获取它的属性?我曾经考虑过通过响应头集合进行攻击,但这看起来很蹩脚.
解决方法
这是我如何从Response中获取cookie的值.如果需要,这样的东西可用于获取整个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; }