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.