0

http://blog.blackballsoftware.com/2010/11/03/make-a-facebook-wall-post-using-the-new-graph-api-and-c/からコードを書き直してクラスを作成していますFacebookへ投稿。投稿データを URLEncode しない限り、コードは機能します。例: 投稿データが「message=Test,please ignore」の場合は機能します。同じデータを "message%3dTest%2cplease+ignore" に URL エンコードすると、エラー {"error":{"message":"(#100) Missing message or attachment","type":"OAuthException", "コード":100}}。

投稿データを 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;

         }
4

1 に答える 1

0

答えは Stackoverflow のC# Escape Plus Sign (+) in POST using HttpWebRequestにあります。URLEncode ではなく、Uri.EscapeDataString を使用します。パラメータ名の後の等号ではなく、パラメータ値のみをエンコードします。例: message=Test%2Cplease%26%20ignore は機能しますが、message%3dTest%2Cplease%26%20ignore は機能しません。これは、パラメーター名の後の等号が %3d としてエンコードされているためです。

于 2012-05-07T11:37:41.897 に答える