我正在将一个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;
- }