LinqToTwitter UploadMediaAsync "media type unrecognized."
LinqToTwitter UploadMediaAsync "media type unrecognized."
我在尝试通过 LinqToTwitter 将图片上传到 Twitter 时收到以下错误消息:
LinqToTwitter.TwitterQueryException: {"request":"/1.1/media/upload.json","error":"media type unrecognized."}
这是我用来调用 UploadMediaAsync 方法的代码:
public async Task TweetAsync(string accessToken, string accessTokenSecret, string status, string url)
{
const string mediaType = "image/jpg";
const string mediaCategory = "tweet_image";
byte[] mediaBytes;
using (var webClient = new WebClient())
{
mediaBytes = webClient.DownloadData(url);
}
var twitterContext = new TwitterContext(Authenticate(accessToken, accessTokenSecret));
var media = await twitterContext.UploadMediaAsync(mediaBytes, mediaType, mediaCategory);
await twitterContext.TweetAsync(status, new[] { media.MediaID });
}
'Authenticate' 方法只是根据存储的凭据创建一个 SingleUserAuthorizer 对象。
mediaBytes 变量中有数据,mediaType 和 mediaCategory 变量与 LinqToTwitter 文档中提供的示例完全相同:https://github.com/JoeMayo/LinqToTwitter/blob/master/Samples/net46/CSharp/AspNetSamples/CoreDemo/Controllers/StatusDemosController.cs(参见第 86 行的 'UploadMediaAsync' 方法)。
我看到的唯一区别是示例从文件系统加载图像,而我的是在 CDN 上,但由于两者都产生字节[],我认为这可能不相关。
我不知道我做错了什么。我有一个使用 LinqToTwitter v3.1.2 的旧项目,它不需要提供 mediaType 或 mediaCategory,并且该项目有效。问题似乎出在 v4.2.1 上,它确实需要参数。
原来问题是我传递给此函数的 URL 是页面 URI 而不是图像 SRC。所以我上传到 twitter 的 byte[] 不是图片。
我在尝试通过 LinqToTwitter 将图片上传到 Twitter 时收到以下错误消息:
LinqToTwitter.TwitterQueryException: {"request":"/1.1/media/upload.json","error":"media type unrecognized."}
这是我用来调用 UploadMediaAsync 方法的代码:
public async Task TweetAsync(string accessToken, string accessTokenSecret, string status, string url)
{
const string mediaType = "image/jpg";
const string mediaCategory = "tweet_image";
byte[] mediaBytes;
using (var webClient = new WebClient())
{
mediaBytes = webClient.DownloadData(url);
}
var twitterContext = new TwitterContext(Authenticate(accessToken, accessTokenSecret));
var media = await twitterContext.UploadMediaAsync(mediaBytes, mediaType, mediaCategory);
await twitterContext.TweetAsync(status, new[] { media.MediaID });
}
'Authenticate' 方法只是根据存储的凭据创建一个 SingleUserAuthorizer 对象。
mediaBytes 变量中有数据,mediaType 和 mediaCategory 变量与 LinqToTwitter 文档中提供的示例完全相同:https://github.com/JoeMayo/LinqToTwitter/blob/master/Samples/net46/CSharp/AspNetSamples/CoreDemo/Controllers/StatusDemosController.cs(参见第 86 行的 'UploadMediaAsync' 方法)。
我看到的唯一区别是示例从文件系统加载图像,而我的是在 CDN 上,但由于两者都产生字节[],我认为这可能不相关。
我不知道我做错了什么。我有一个使用 LinqToTwitter v3.1.2 的旧项目,它不需要提供 mediaType 或 mediaCategory,并且该项目有效。问题似乎出在 v4.2.1 上,它确实需要参数。
原来问题是我传递给此函数的 URL 是页面 URI 而不是图像 SRC。所以我上传到 twitter 的 byte[] 不是图片。