我正在尝试将c#cloudinary api移植到mono,我在构建http请求时遇到了一些问题。
我已经将这个方法分离出来设置请求,但HttpWebRequest.ContentLength在单声道中变为-1,但是.net内容已正确构建。
我在Mac上运行最新的Xamarin Studio,我正在构建一个MONO / .NET 4.0库 单声道版本:2.10.12
编辑:简化代码,此测试在Visual Studio中传递但在Xamarin工作室中失败
编辑:如果有人愿意提供帮助,代码会被推送到github
[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);
}
答案 0 :(得分:2)
当你这样做时
System.Net.HttpWebRequest.Create("http://foo.com");
您实际创建了内部类System.Net.Browser.BrowserHttpWebRequest
的实例这是继承层次结构
System.Net.WebRequest
System.Net.HttpWebRequest
System.Net.Browser.PolicyBasedWebRequest
System.Net.Browser.BrowserHttpWebRequest
内容长度在PolicyBasedWebRequest中处理,在ctor中初始化为-1并且从未更改过; 我建议你手动设置它。
答案 1 :(得分:0)
见这里:Xamarin Forum
它建议替换它:
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();
用这个:
httpWebRequest.ContentLength = bundleString.Length;
StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream());
requestWriter.Write(bundleString);
requestWriter.Flush();
requestWriter.Close();
修复了问题。你可以试试这个。