我有一个带标题的请求,其中Cookie值包含+
,当我尝试获取Cookie值时,加号会更改为空格。
[Fact]
public void Test()
{
var cookieValue = "YmFkIGVuY29kaW5nLi4uLi4u5vjlkYXNkZmFzZGZkc2Z+mc0";
var requestMessage = new HttpRequestMessage();
requestMessage.Headers.Add("Cookie", string.Format("test={0};", cookieValue));
var testCookie = requestMessage.Headers.GetCookies()
.SelectMany(x => x.Cookies)
.Single(x => x.Name == "test");
Assert.Equal(cookieValue, testCookie.Value);
}
返回的值为YmFkIGVuY29kaW5nLi4uLi4u5vjlkYXNkZmFzZGZkc2Z mc0
,请注意+
已替换为。这是一个错误还是我错过了什么?
答案 0 :(得分:1)
+
是urlencoding中空格字符的编码,因此它被替换。如果你更换你的行
requestMessage.Headers.Add("Cookie", string.Format("test={0};", cookieValue));
带
requestMessage.Headers.Add("Cookie", string.Format("test={0};", HttpUtility.UrlEncode(cookieValue)));
你的测试现在应该通过。此URL将字符串编码到标头中,编码保留字符,如加号。
答案 1 :(得分:0)
我有同样的问题。 在最坏的情况下,它似乎是一个错误,在最好的情况下,它是不一致的,因为它取决于您用来检索Cookie的内容。我不认为.NET应该解码cookie。
在aspx页面中从System.Web.UI.Page.Request.Cookies
检索到的Cookie。
"yCYq2a+J2CT2f/USHN2JudhvV2gJi4yyixkskWlOV4FmhptCtBXWUIV5n4tvO/OVUJhyWj8ZpEItLPSHSMhvw7vr+EzEGW9wlQ5FPSlHgGIG/5Qi"
通过Web API从System.Net.Http.HttpRequestMessage.Headers.GetCookies()
中检索到的Cookie。
"yCYq2a J2CT2f/USHN2JudhvV2gJi4yyixkskWlOV4FmhptCtBXWUIV5n4tvO/OVUJhyWj8ZpEItLPSHSMhvw7vr EzEGW9wlQ5FPSlHgGIG/5Qi"