2012-05-06 9 views
0

私はhttp://blog.blackballsoftware.com/2010/11/03/making-a-facebook-wall-post-using-the-new-graph-api-and-c/からコードを書き換えてFacebookに投稿するクラスを作成しています。このコードは、投稿データをURLエンコードしない限り動作します。例:投稿データが "message = Test、ignore"の場合、それは機能します。同じデータを "message%3dTest%2cplease + ignore"にURLエンコードすると、エラー "{" message ":"(#100)Missing message or attachment "、" type ":" OAuthException " "code":100}}。FacebookのポストデータをC#でURLエンコードする方法

投稿データをURLエンコードする必要がありますか?私は、このようなメッセージ "Test & Message"を投稿した場合、Testという単語だけが表示されるはずです。

以下に関連コードを示します。もし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にあります。 URLEncodeではなくUri.EscapeDataStringを使用します。パラメータ名の後に等号記号ではなく、パラメータ値のみをエンコードします。例:message = Test%2Cplease%26%20ignoreは動作しますが、メッセージ%3dTest%2Cplease%26%20ignoreは、パラメータ名の後に等号が%3dとしてエンコードされているため動作しません。

関連する問題