HttpWebRequest在mono和.net中的实现方式有所不同吗?

ter*_*tyl 23 c# mono stream httpwebrequest cloudinary

我试图将c#cloudinary api移植到mono,我在构建http请求时遇到了一些问题.

我已经分离出这个方法来设置请求,但HttpWebRequest.ContentLength在单声道中变成-1,但是.net内容是正确构建的.

我在Mac上运行最新的Xamarin Studio,我正在构建一个MONO/.NET 4.0库Mono版本: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);
    }
Run Code Online (Sandbox Code Playgroud)

ale*_*exb 2

当你这样做时

System.Net.HttpWebRequest.Create("http://foo.com");
Run Code Online (Sandbox Code Playgroud)

您实际上创建了内部类System.Net.Browser.BrowserHttpWebRequest的实例

这是继承层次结构

System.Net.WebRequest
  System.Net.HttpWebRequest
    System.Net.Browser.PolicyBasedWebRequest
      System.Net.Browser.BrowserHttpWebRequest

内容长度在PolicyBasedWebRequest中处理,在ctor中用-1初始化并且从未改变;我建议你手动设置一下。