¿Existe una clase similar a HttpUtility para codificar el contenido de un encabezado personalizado? Idealmente, me gustaría mantener el contenido legible.Cómo codificar encabezados HTTP personalizados en C#
Respuesta
Mayeb This one? UrlEncode Function
Estoy buscando un método que no realiza la codificación requerida para la URL, pero solo tiene en cuenta las limitaciones específicas de los encabezados HTTP – antonio
lo siento fuera de la cabeza, pero para su objeto de solicitud debe haber un objeto de encabezados que puede agregar.
es decir, request.headers.add ("blah");
Eso no se ve pero debe apuntar en la dirección correcta.
La pregunta es sobre la codificación del valor del encabezado, no sobre la adición de un encabezado. –
Puede usar el HttpEncoder.HeaderNameValueEncode Method en .NET Framework 4.0 y superior.
Para versiones anteriores de .NET Framework, puede rodar su propio codificador, usando la lógica indica en la página de referencia HttpEncoder.HeaderNameValueEncode:
Todos los caracteres Unicode cuyo valor es inferior a 32 caracteres ASCII , excepto el carácter ASCII 9, están codificados en URL en un formato de% NN donde los caracteres N representan valores hexadecimales.
El carácter ASCII 9 (el carácter de tabulación horizontal) no tiene codificación URL.
El carácter ASCII 127 está codificado como% 7F.
Los demás caracteres no están codificados.
Actualización:
Como OliverBock señalar el método HttpEncoder.HeaderNameValueEncode está protegido e interna. Fui a abrir proyecto Mono fuente y encontré la implementación del 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;
}
Para su información
[aquí] (https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs)
HeaderNameValueEncode() está protegido + interno. –
@OliverBock tienes razón, actualizaste la publicación. – liuhongbo
Lamentablemente, ni esta versión ni la versión .NET (vista a través de Reflector) se molestan en codificar correctamente los caracteres '%' que ya están en los datos. –
Esto hace el mismo trabajo que HeaderNameValueEncode(), sino también codificará% caracteres para que el encabezado pueda decodificarse confiablemente más tarde.
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);
}
Para me ayudó Uri.EscapeDataString (HeaderValue)
- 1. Agregar encabezados HTTP personalizados usando JavaScript
- 2. API REST: encabezados HTTP personalizados frente a parámetros de URL
- 3. encabezados HTTP personalizados para archivos estáticos con Django
- 4. Agregar encabezados Http personalizados al proxy de servicio web
- 5. Cómo establecer encabezados personalizados en PHP
- 6. Agregue encabezados personalizados utilizando HttpWebRequest
- 7. Encabezados personalizados en Amazon S3
- 8. ¿Cómo puedo enviar encabezados personalizados con URLRequest
- 9. Encabezados personalizados con pycurl
- 10. Reading HTTP Request Headers personalizados
- 11. Analizando encabezados HTTP
- 12. Cómo crear encabezados de correo electrónico personalizados
- 13. Cómo reenviar encabezados en la redirección HTTP
- 14. Cómo agregar encabezados http en espuma 0.3.6?
- 15. SP Char en encabezados HTTP?
- 16. Compactar encabezados Http
- 17. JSF, sobrescribir encabezados HTTP
- 18. WPF Datagrid vinculando encabezados de columna personalizados
- 19. Codificar/ofuscar los parámetros HTTP
- 20. Cneonction y nnCoection encabezados HTTP
- 21. ¿Cómo obtener encabezados HTTP no estándar en nginx?
- 22. Conflictos de encabezados HTTP multilínea
- 23. Cómo agregar encabezados de soap personalizados en wcf?
- 24. Establecer encabezados de solicitud HTTP personalizados en un objeto de URL no funciona
- 25. ¿Hay una extensión de Google Chrome para inyectar encabezados HTTP personalizados en cada solicitud?
- 26. Configuración de encabezados HTTP en Play 2.0 (scala)?
- 27. Parse HTTP encabezados sin procesar
- 28. Enviando encabezados http con python
- 29. Enviando encabezados HTTP con HTTP Web Request para autenticación NTLM
- 30. Cómo codificar/decodificar video usando C#?
¿Qué es exactamente lo que significa? – SLaks