You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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);

关键修改说明

  1. 替换AddParameter为AddFormParameter
    RestSharp中,AddParameter在multipart模式下的行为不稳定,可能将参数解析为URL参数而非表单字段。AddFormParameter会明确将参数加入multipart表单的字段集合,确保Twitter API能读取到media_ids。

  2. 指定UTF-8编码
    通过Content-Type头强制设置编码为UTF-8,避免印地语字符、表情符号因编码错误被转义或丢失,同时让Twitter正确解析文本内容。

  3. 保留原AlwaysMultipartFormData判断逻辑
    原逻辑通过检测非ASCII字符自动启用multipart,符合Twitter API对含特殊字符推文的提交要求,无需改动,只需配合AddFormParameter即可。

额外检查点

  • 确认mediaIds是已成功上传的有效媒体ID,逗号分隔无多余空格或格式错误;
  • 验证RestSharp v106.11.7版本无已知的multipart表单提交bug(该版本相对稳定,问题大概率出在参数传递方式)。

内容的提问来源于stack exchange,提问作者Mridul Gautam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:25:47