Saltar al contenido

C# HttpWebRequest de tipo “aplicación/x-www-form-urlencoded”: ¿cómo enviar el carácter ‘&’ en el cuerpo del contenido?

Posterior a observar en varios repositorios y sitios webs al final nos encontramos con la resolución que te enseñamos más adelante.

Solución:

Primero instale el paquete nuget “Microsoft ASP.NET Web API Client”:

  PM > Install-Package Microsoft.AspNet.WebApi.Client

Luego use la siguiente función para publicar sus datos:

public static async Task PostFormUrlEncoded(string url, IEnumerable> postData)

    using (var httpClient = new HttpClient())
    
        using (var content = new FormUrlEncodedContent(postData))
        
            content.Headers.Clear();
            content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

            HttpResponseMessage response = await httpClient.PostAsync(url, content);

            return await response.Content.ReadAsAsync();
        
    

Y así es como se usa:

TokenResponse tokenResponse = 
    await PostFormUrlEncoded(OAuth2Url, OAuth2PostData);

o

TokenResponse tokenResponse = 
    (Task.Run(async () 
        => await PostFormUrlEncoded(OAuth2Url, OAuth2PostData)))
        .Result

o (no recomendado)

TokenResponse tokenResponse = 
    PostFormUrlEncoded(OAuth2Url, OAuth2PostData).Result;

Dado que su tipo de contenido es application/x-www-form-urlencoded deberá codificar el cuerpo POST, especialmente si contiene caracteres como & que tienen un significado especial en una forma.

Intenta pasar tu string a través de HttpUtility.UrlEncode antes de escribirlo en el flujo de solicitud.

Aquí hay un par de enlaces para referencia.

  • http://en.wikipedia.org/wiki/Percent-encoding

Siempre que el servidor permita que el carácter ampresand se publique (no todos lo hacen, ya que puede ser inseguro), todo lo que debe hacer es codificar en URL el carácter. En el caso de un ampersand, debe reemplazar el carácter con %26.

.NET proporciona una buena manera de codificar todo string para ti sin embargo:

string strNew = "&uploadfile=true&file=" + HttpUtility.UrlEncode(iCalStr);

Te mostramos comentarios y valoraciones

Ten en cuenta dar recomendación a este artículo si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *