我只是想澄清一下.
我知道,如果我在之前的请求中设置了cookie,它将显示在我的Request.Cookies收藏中.
我想更新现有的Cookie.
我的Request.Cookies收藏中的cookie是否已复制到我的Response.Cookies收藏中?我是否需要使用相同的密钥添加新的cookie Response.Cookies.Add(),或者我是否需要使用Response.Cookies.Set()?
asp.net httpresponse httprequest httpcookie httpcookiecollection
在我的代码中,我必须将Json序列化一个CookieCollection对象并将其作为字符串传递,为实现这一点我喜欢这样:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies);
Run Code Online (Sandbox Code Playgroud)
导致以下json
[
{
"Comment": "",
"CommentUri": null,
"HttpOnly": false,
"Discard": false,
"Domain": "www.site.com",
"Expired": true,
"Expires": "1970-01-01T03:30:01+03:30",
"Name": "version",
"Path": "/",
"Port": "",
"Secure": false,
"TimeStamp": "2015-06-01T12:19:46.3293119+04:30",
"Value": "deleted",
"Version": 0
},
{
"Comment": "",
"CommentUri": null,
"HttpOnly": false,
"Discard": false,
"Domain": ".site.com",
"Expired": false,
"Expires": "2015-07-31T12:19:48+04:30",
"Name": "ADS_7",
"Path": "/",
"Port": "",
"Secure": false,
"TimeStamp": "2015-06-01T12:19:46.3449217+04:30",
"Value": "0",
"Version": 0
}
]
Run Code Online (Sandbox Code Playgroud)
为了反序列化这个json我想做这样的事情:
var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json);
Run Code Online (Sandbox Code Playgroud)
但它失败并提出JsonSerializationException说
无法创建和填充列表类型System.Net.CookieCollection.路径'',第1行,第1位.
所以我将我的代码更改为以下内容并立即开始工作
var tmpcookies …Run Code Online (Sandbox Code Playgroud) c# serialization json.net httpcookiecollection json-deserialization
在HttpCookieCollection.Get MSDN文档中,声明:
如果指定的cookie不存在,则此方法将创建具有该名称的新cookie.
这是真的,在调用时HttpContext.Request.Cookies或HttpContext.Response.Cookies从"真正的"Web服务器运行良好.
但是,这段代码:
HttpCookieCollection foo = new HttpCookieCollection();
HttpCookie cookie = foo.Get("foo");
Console.WriteLine(cookie != null);
Run Code Online (Sandbox Code Playgroud)
显示False(cookie为空).
如果HttpCookieCollection从Request.CookiesHTTP处理程序中检索,则不是这种情况.
知道这里有什么问题/是否需要任何其他设置?
我问这个是因为我在模拟HttpContextBase的地方编写单元测试,因此没有提供"真实"的上下文.
谢谢您的帮助