如何修复RestSharp调用Twitter API v1.1未附带视频的印地语推文问题
解决RestSharp调用Twitter API v1.1发布带视频印地语推文的问题
问题核心
你的代码中存在两个关键问题:一是启用AlwaysMultipartFormData时,使用AddParameter无法正确将media_ids封装到multipart表单中,导致Twitter API无法识别该参数;二是未明确指定UTF-8编码,可能影响印地语和表情符号的正常传输。
修改方案及代码调整
直接替换原有参数添加方式,并明确设置编码,修改后的代码如下:
var client = new RestClient($"https://api.twitter.com/{v1.1}/statuses/update.json") { Authenticator = OAuth1Authenticator.ForProtectedResource(config.ConsumerKey, config.ConsumerSecret, config.Token, config.TokenSecret) }; var request = new RestRequest(Method.POST); // 用AddFormParameter替代AddParameter,确保multipart模式下参数被正确识别 request.AddFormParameter("status", content); request.AddFormParameter("media_ids", string.Join(",", mediaIds)); // 保留原非ASCII字符判断逻辑,确保需要时自动启用multipart request.AlwaysMultipartFormData = Regex.IsMatch(content, @"[^\x00-\x7F]", RegexOptions.Multiline | RegexOptions.CultureInvariant); // 显式指定UTF-8编码,保证印地语和表情符号正常传输 request.AddHeader("Content-Type", "multipart/form-data; charset=utf-8"); var queryResult = await client.ExecuteAsync(request);
关键修改说明
替换
AddParameter为AddFormParameter
RestSharp中,AddParameter在multipart模式下的行为不稳定,可能将参数解析为URL参数而非表单字段。AddFormParameter会明确将参数加入multipart表单的字段集合,确保Twitter API能读取到media_ids。指定UTF-8编码
通过Content-Type头强制设置编码为UTF-8,避免印地语字符、表情符号因编码错误被转义或丢失,同时让Twitter正确解析文本内容。保留原
AlwaysMultipartFormData判断逻辑
原逻辑通过检测非ASCII字符自动启用multipart,符合Twitter API对含特殊字符推文的提交要求,无需改动,只需配合AddFormParameter即可。
额外检查点
- 确认
mediaIds是已成功上传的有效媒体ID,逗号分隔无多余空格或格式错误; - 验证RestSharp v106.11.7版本无已知的multipart表单提交bug(该版本相对稳定,问题大概率出在参数传递方式)。
内容的提问来源于stack exchange,提问作者Mridul Gautam
相关产品推荐
相关产品推荐

