2015-08-17 3 views
4

Я устанавливаю файлы cookie на свой ASP.NET-контроллер api. Это моя часть кода:Значения cookie для кодировки WebAPI

var cookie = new CookieHeaderValue(cookieName, cookieValue) 
{ 
    Expires = cookieExpires, Domain =cookieDomain, Path= "/" 
}; 
response.Headers.AddCookies(new[] {cookie}); 

Я заметил, что значение cookie автоматически закодировано. Таким образом, abc== становится abc%3d%3d. Это не происходит на обычном MVC-контроллере.

Как предотвратить его кодирование?

+0

http://stackoverflow.com/ вопросы/23428295/stop-url-encoding-cookie – CodeCaster

+0

CodeCaster. Благодарю за ваш ответ. Да, у этого человека есть тот же вопрос, который у меня есть. Никаких успешных ответов не было. Надеюсь, кто-то предоставит вам решение. Еще раз спасибо! – rng

ответ

2

Он закодирован, потому что в противном случае строковое значение «abc ==» приведет к недопустимому файлу cookie. Кодирование является автоматическим для предотвращения появления недопустимых символов, таких как «=», в файле cookie.

Я не уверен, что вы имеете в виду, что это не происходит в MVC, может быть, когда вы получаете доступ к значению cookie в запросе, тогда оно декодируется?

См https://en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie

EDIT Если "абв ==" строка в кодировке Base64 байтовый массив, то вы можете получить Arround с помощью методов/UrlTokenDecode System.Web.HttpServerUtility UrlTokenEncode вместо этого. Тогда никакой другой кодировки не будет.

+0

Спасибо за ваш ответ! С помощью MVC я имею в виду обычный контроллер MVC. У меня в основном есть тот же набор HttpCookies на обоих контроллерах: контроллер MVC и Web Api Controller. Контроллер MVC не кодирует его, и он работает хорошо. Web Api Controller кодирует его. – rng

+0

Не могли бы вы отследить ответы с файлом cookie, находящимся в Fiddler или подобном инструменте, и опубликовать их? –

+0

Несомненно. Это ответы. Для обычного контроллера: ** Set-Cookie: MyCookie = abc ==; expires = Thu, 13 Aug 2015 18:41:31 GMT; domain = my.domain.com ** Для веб-администратора api: ** Set-Cookie: MyCookie = abc% 3d% 3d; expires = Thu, 13 Aug 2015 18:41:31 GMT; домен = my.domain.com ** – rng

1

Чтобы предотвратить это пожалуйста ниже использовать везде, где вы читаете печенье:

Server.UrlDecode("Your string"); 

Это удалит, что '% 3d' и преобразовать его обратно в '='

Смежные вопросы