2012-05-06 84 views
0

我正在從http://blog.blackballsoftware.com/2010/11/03/making-a-facebook-wall-post-using-the-new-graph-api-and-c/重寫代碼創建一個類來發布到Facebook。只要我不對發佈數據進行URLEncode編碼,代碼就可以工作。例如:如果發佈數據是「消息=測試,請忽略」,那麼它的工作原理。如果我將相同的數據編碼爲「message%3dTest%2cplease + ignore」,那麼我得到錯誤{「error」:{「message」:「(#100)Missing message or attachment」,「type」:「OAuthException」, 「代碼」:100}}。如何URLEncode Facebook發佈數據在C#

郵政數據應該URLEncoded?我認爲這應該是因爲如果我發佈這樣的消息,「測試&消息」,那麼只會出現單詞測試。

相關代碼如下。如果postParams = HttpUtility.UrlEncode(postParams);被註釋掉了,那麼代碼就起作用了。如果沒有,Facebook會返回消息丟失的錯誤。

 postParams = HttpUtility.UrlEncode(postParams); 
     byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postParams); 
     webRequest.ContentLength = bytes.Length; 

     System.IO.Stream os = webRequest.GetRequestStream(); 
     os.Write(bytes, 0, bytes.Length); 
     os.Close(); 

     try 
     { 
      var webResponse = webRequest.GetResponse(); 
     } 

     catch (WebException ex) 
     { 
      StreamReader errorStream = null; 

      errorStream = new StreamReader(ex.Response.GetResponseStream()); 
      error = errorStream.ReadToEnd() + postParams; 

     } 

回答

0

答案可以在Stackoverflow的C# Escape Plus Sign (+) in POST using HttpWebRequest找到。使用Uri.EscapeDataString而不是URLEncode。僅對參數值進行編碼,而不對參數名稱進行等號。例如:message = Test%2Cplease%26%20ignore有效,但消息%3dTest%2Cplease%26%20ignore不起作用,因爲參數名稱後的等於%3d編碼。