Существует ли класс, подобный HttpUtility, для кодирования содержимого пользовательского заголовка? В идеале я хотел бы, чтобы содержание было читаемым.Как кодировать пользовательские заголовки HTTP в C#
ответ
Mayeb Этот? UrlEncode Function
Я ищу метод, который не выполняет кодировку, требуемую для URL-адреса, но просто рассматривает конкретные ограничения HTTP-заголовков – antonio
извините его от верхней части головы, но для объекта запроса должен быть объект заголовков, к которому вы можете добавить.
i.e. request.headers.add ("blah");
Это не место, но оно должно указывать на вас в правильном направлении.
Вопрос о кодировании значения заголовка, а не о добавлении заголовка. –
Вы можете использовать HttpEncoder.HeaderNameValueEncode Method в .NET Framework 4.0 и выше.
Для предыдущих версий .NET Framework, вы можете свернуть свой собственный кодировщик, используя логику отметил на опорном HttpEncoder.HeaderNameValueEncode странице:
Все символы Unicode которых значение меньше, чем ASCII символ 32 , , за исключением символа ASCII 9, кодируются URL-адресом в формате% NN, где N символов представляют шестнадцатеричные значения.
Символ ASCII 9 (символ горизонтальной вкладки) не кодируется URL-адресом.
ASCII-символ 127 кодируется как% 7F.
Все остальные символы не кодируются.
Update:
Как OliverBock указывают Метод HttpEncoder.HeaderNameValueEncode защищен и внутренним. Я пошел, чтобы открыть исходный проект Mono и нашли в Моно реализации
void HeaderNameValueEncode (string headerName, string headerValue, out string encodedHeaderName, out string encodedHeaderValue)
{
if (String.IsNullOrEmpty (headerName))
encodedHeaderName = headerName;
else
encodedHeaderName = EncodeHeaderString (headerName);
if (String.IsNullOrEmpty (headerValue))
encodedHeaderValue = headerValue;
else
encodedHeaderValue = EncodeHeaderString (headerValue);
}
static void StringBuilderAppend (string s, ref StringBuilder sb)
{
if (sb == null)
sb = new StringBuilder (s);
else
sb.Append (s);
}
static string EncodeHeaderString (string input)
{
StringBuilder sb = null;
for (int i = 0; i < input.Length; i++) {
char ch = input [i];
if ((ch < 32 && ch != 9) || ch == 127)
StringBuilderAppend (String.Format ("%{0:x2}", (int)ch), ref sb);
}
if (sb != null)
return sb.ToString();
return input;
}
Просто FYI
[здесь] (https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs)
HeaderNameValueEncode() защищен + внутренний. –
@OliverBock вы правы, обновили сообщение. – liuhongbo
К сожалению, ни эта версия, ни версия .NET (видимая через Reflector) не хотят правильно кодировать символы «%» уже в данных. –
Это делает ту же работу, как HeaderNameValueEncode(), но также будет кодировать% так что заголовок может быть надежно декодирован позже.
static string EncodeHeaderValue(string value)
{
return Regex.Replace(value, @"[\u0000-\u0008\u000a-\u001f%\u007f]", (m) => "%"+((int)m.Value[0]).ToString("x2"));
}
static string DecodeHeaderValue(string encoded)
{
return Regex.Replace(encoded, @"%([0-9a-f]{2})", (m) => new String((char)Convert.ToInt32(m.Groups[1].Value, 16), 1), RegexOptions.IgnoreCase);
}
Для меня помогли Uri.EscapeDataString (HeaderValue)
- 1. Неинформативные пользовательские HTTP-заголовки
- 2. Пользовательские заголовки HTTP с XmlRpcClient
- 3. Akka Http Client: Пользовательские заголовки
- 4. Nginx - Доступные пользовательские заголовки Http
- 5. Должен ли я кодировать заголовки HTTP-запросов?
- 6. Как добавить пользовательские заголовки HTTP в пользовательские вкладки Chrome?
- 7. Пользовательские заголовки SOAP в C#
- 8. Пользовательские заголовки HTTP-заголовков в HTML
- 9. JMeter - добавлять пользовательские заголовки HTTP в HTTPSampler
- 10. Пользовательские заголовки HTTP для собственного веб-приложения
- 11. PHP и пользовательские заголовки HTTP, плохая практика?
- 12. AngularJS $ http пользовательские заголовки не работают
- 13. WWW :: Mechanize отправить пользовательские заголовки HTTP
- 14. Пользовательские заголовки HTTP с JsonRest Store (dojo)
- 15. Heroku ест мои пользовательские заголовки HTTP
- 16. Пользовательские заголовки HTTP с использованием JPlayer
- 17. ServiceStack JsonServiceClient - Пользовательские заголовки HTTP не отправлены
- 18. Добавить пользовательские заголовки http для запросов chai
- 19. Пользовательские заголовки HTTP для запросов WebView
- 20. Какие пользовательские заголовки HTTP-заголовков заслуживают внимания?
- 21. Как отправить пользовательские HTTP-заголовки с моего сервера Perl?
- 22. Как добавить пользовательские заголовки HTTP в ответ CXF?
- 23. Как просмотреть пользовательские HTTP-заголовки ASP.NET в скрипалле?
- 24. Как настроить пользовательские заголовки для HTTP :: Tiny в Perl?
- 25. Как добавить пользовательские заголовки HTTP в IIS из командной строки
- 26. Как добавить пользовательские заголовки HTTP в Asp.Net MVC-
- 27. Пользовательские заголовки в WCF
- 28. Пользовательские заголовки в Nginx
- 29. Как настроить специальные пользовательские заголовки для модулей по запросу HTTP?
- 30. Как добавить пользовательские заголовки для запроса с помощью cljs-http
Что именно вы имеете в виду? – SLaks