c# - ¿Se implementó HttpWebRequest de manera diferente en mono y.net?
stream cloudinary (2)
Cuando tu lo hagas
System.Net.HttpWebRequest.Create("http://foo.com");
realmente creas una instancia de la clase interna System.Net.Browser.BrowserHttpWebRequest
Aquí está la jerarquía de herencia.
System.Net.WebRequest
System.Net.HttpWebRequest
System.Net.Browser.PolicyBasedWebRequest
System.Net.Browser.BrowserHttpWebRequest
La longitud del contenido se maneja en PolicyBasedWebRequest, se inicializa en ctor con -1 y nunca se cambia; Te sugiero que lo configures manualmente.
Estoy tratando de portar el c # cloudinary api a mono y estoy teniendo algunos problemas al crear la solicitud http.
He separado este método para configurar la solicitud, pero HttpWebRequest.ContentLength resulta ser -1 en mono, pero es .net el contenido está construido correctamente.
Estoy ejecutando el Xamarin Studio más nuevo en una Mac y estoy construyendo una biblioteca de MONO / .NET 4.0 versión Mono: 2.10.12
EDIT: Código simplificado, esta prueba pasa en Visual Studio pero falla en Xamarin studio
EDITAR: El código es empujado a github si alguien quiere ayudar
[Test]
public void StreamTest()
{
var request = System.Net.HttpWebRequest.Create("http://foo.com");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new System.IO.StreamWriter(request.GetRequestStream()))
{
writer.Write("anything");
}
Assert.IsTrue(request.ContentLength > 0);
}
Ver aquí: Foro de Xamarin
Se sugiere que reemplazando esto:
byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(bundleString);
string result = Convert.ToBase64String(buffer);
StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream());
requestWriter.Write(result, 0, result.Length);
requestWriter.Flush();
requestWriter.Close();
con este:
httpWebRequest.ContentLength = bundleString.Length;
StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream());
requestWriter.Write(bundleString);
requestWriter.Flush();
requestWriter.Close();
arreglado el problema Puedes probar esto.