我试图根据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