2013-05-10 28 views
23

我正試圖將c#cloudinary api移植到mono,並且我在構建http請求時遇到了一些問題。HttpWebRequest在mono和.net中的實現方式不同嗎?

我已經分離出了設置請求的方法,但是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

您使用的是哪種版本的Mono? – PhonicUK 2013-05-10 13:05:26

+0

我正在構建一個MONO/.net 4.0庫。最新Xamarin工作室 – terjetyl 2013-05-10 13:09:29

+0

你可以檢查你正在使用的單聲道*確切*版本。你可以通過在命令行上運行「mono -version」來找到它。 – PhonicUK 2013-05-10 13:23:18

回答

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(); 

解決了這一問題。你可以試試這個。

相關問題