如何在C#中URLEncode Facebook发布数据

时间:2012-05-06 16:33:06

标签: facebook

我正在重写http://blog.blackballsoftware.com/2010/11/03/making-a-facebook-wall-post-using-the-new-graph-api-and-c/的代码,以创建一个发布到Facebook的课程。只要我不对URLEncode发布数据,代码就可以工作。例如:如果帖子数据是“message = Test,请忽略”,那么它可以工作。如果我URLEncode相同的数据到“消息%3dTest%2cplease +忽略”然后我得到错误{“错误”:{“消息”:“(#100)缺少消息或附件”,“类型”:“OAuthException”, “代码”:100}}

Post数据是否应该URLEncoded?我认为这应该是因为如果我发布这样的消息“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;

         }

1 个答案:

答案 0 :(得分:0)

答案可以在C# Escape Plus Sign (+) in POST using HttpWebRequest的Stackoverflow上找到。使用Uri.EscapeDataString而不是URLEncode。仅对参数值进行编码,而不是参数名称后的等号。示例:message = Test%2Cplease%26%20ignore有效,但消息%3dTest%2Cplease%26%20ignore不起作用,因为参数名称后面的等号编码为%3d。