HttpRequestMessage更改cookie值

时间:2015-03-09 15:41:28

标签: c# asp.net-web-api2

我有一个带标题的请求,其中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,请注意+已替换为。这是一个错误还是我错过了什么?

2 个答案:

答案 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"