0

我试图根据msdn 示例中的代码示例发推文,但它不起作用,知道为什么吗?是 twitter 改变 api 政策吗?这是我的代码

public void postToTwitter()
{
    try
    {
        var image = new WriteableBitmap(430, 400);
        image.Render(locationPict, null);
        image.Invalidate();
        MemoryStream ms = new MemoryStream();
        image.SaveJpeg(ms, 430, 400, 0, 100);

        const string filename = "/Shared/ShellContent/image.jpg";

        using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (!isf.DirectoryExists("/post"))
            {
                isf.CreateDirectory("/post");
            }
            using (var stream = isf.OpenFile(filename, System.IO.FileMode.OpenOrCreate))
            {
                image.SaveJpeg(stream, 430, 400, 0, 100);
            }
        }

        var credentials = new OAuthCredentials
        {
            Type = OAuthType.ProtectedResource,
            SignatureMethod = OAuthSignatureMethod.HmacSha1,
            ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
            ConsumerKey = twitterAppSettings.consumerKey,
            ConsumerSecret = twitterAppSettings.consumerKeySecret,
            Token = MainUtil.GetKeyValue<string>("twitterAccessToken"),
            TokenSecret = MainUtil.GetKeyValue<string>("twitterAccessTokenSecret"),
            Version = "1.0"
        };

        var restClient = new RestClient
        {
            Authority = "https://api.twitter.com",
            HasElevatedPermissions = true 
        };

        var restRequest = new RestRequest
        {
            Credentials = credentials,
            Path = "1.1/statuses/update_with_media.json",
            Method = WebMethod.Post 
        };

        restRequest.AddField("status", textpost.Text);
        restRequest.AddFile("media[]", image.jpg, ms, "image/jpg");
        restClient.BeginRequest(restRequest, new RestCallback(PostTweetRequestCallback));
    }
    catch(Exception ex)
    {
        string message = "Tweet failed! Exception details: " + ex.ToString();
        MessageBox.Show(message);
    }
}

private void PostTweetRequestCallback(RestRequest request, RestResponse response, object obj)
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            MessageBox.Show("TWEET_POSTED_SUCCESSFULLY");
        }
        else if (response.StatusCode == HttpStatusCode.Forbidden)
        {
            MessageBox.Show("TWEET_POST_ERR_UPDATE_LIMIT");
        }
        else
        {
            MessageBox.Show("TWEET_POST_ERR_FAILED");
        }
    });
} 

我在代码中添加了一些调整,以便像在 msdn 示例中那样从 photochooser 任务中获取图片,而是从保存到隔离存储中的 writeablebitmap 中获取图片,但我也已经尝试过与 msdn 中的完全一样的方法并收到错误 TWEET_POST_ERR_FAILED

4

1 回答 1

0

尝试将字符串“form-data”作为第五个参数添加到 restRequest.AddFile:

restRequest.AddFile("media[]", image.jpg, ms, "image/jpg","form-data");
于 2014-08-11T21:07:56.463 回答