HttpWebRequest在mono和.net中实现不同吗?
本文关键字:实现 mono net HttpWebRequest | 更新日期: 2023-09-27 18:13:12
我正在尝试将c# cloudary api移植到mono,并且我在构建http请求时遇到了一些问题。
我已经分离出这个方法来设置请求,但HttpWebRequest。ContentLength在单声道中是-1,但在。net中内容是正确构建的。
我在Mac上运行最新的Xamarin Studio,我正在构建一个MONO/.NET 4.0库Mono版本:2.10.12
编辑:简化代码,此测试在Visual Studio中通过,但在Xamarin Studio中失败
编辑:如果有人愿意帮助,代码将被推送到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);
}
当你这么做的时候
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中处理,初始化为-1并且永远不会改变;我建议您手动设置。
查看这里:Xamarin论坛
它建议替换这个:
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();
with this:
httpWebRequest.ContentLength = bundleString.Length;
StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream());
requestWriter.Write(bundleString);
requestWriter.Flush();
requestWriter.Close();
修复了这个问题。你可以试试这个