如何将含嵌套参数的Curl命令转换为RestSharp实现?
解决RestSharp发送嵌套JSON结构POST请求的问题
你的问题核心在于:你之前用AddParameter添加的是表单键值对参数,但目标API需要的是JSON格式的请求体,这就是服务器无法识别请求的原因。下面给你两种正确的实现方式:
方式1:定义实体类映射嵌套结构(推荐,更易维护)
首先创建对应API请求结构的类,让代码结构更清晰:
public class TranslationRequest { public SourceInfo Source { get; set; } public TargetInfo Target { get; set; } } public class SourceInfo { public string Dialect { get; set; } public string Text { get; set; } } public class TargetInfo { public string Dialect { get; set; } }
然后用RestSharp构建并发送请求:
// 初始化客户端和请求对象 var client = new RestClient("https://dev-api.itranslate.com/translation/v2/"); var request = new RestRequest(Method.Post); // 添加授权头 request.AddHeader("Authorization", "Bearer 603160b7-cee1-4c13-bcd7-37420b55211d"); // 构建符合API要求的嵌套结构请求体 var requestBody = new TranslationRequest { Source = new SourceInfo { Dialect = "en", Text = "Hello World" }, Target = new TargetInfo { Dialect = "es" } }; // 将对象自动序列化为JSON并添加到请求体(RestSharp会自动设置Content-Type为application/json) request.AddJsonBody(requestBody); // 执行请求并获取响应 var response = client.Execute(request);
方式2:使用匿名对象快速实现
如果不想额外定义类,也可以直接用匿名对象快速构建嵌套结构:
var client = new RestClient("https://dev-api.itranslate.com/translation/v2/"); var request = new RestRequest(Method.Post); request.AddHeader("Authorization", "Bearer 603160b7-cee1-4c13-bcd7-37420b55211d"); // 直接构建匿名嵌套对象,和API要求的JSON结构完全匹配 var requestBody = new { source = new { dialect = "en", text = "Hello World" }, target = new { dialect = "es" } }; request.AddJsonBody(requestBody); var response = client.Execute(request);
为什么之前的方法无效?
你之前调用request.AddParameter("source", "dialect:'en'"),本质是在请求里添加了表单格式的键值对参数,最终请求体是类似source=dialect:'en'&source=Text:'Hello World'&target=dialect:'es'的格式,完全不符合API要求的JSON结构,所以服务器无法解析。
而AddJsonBody方法会自动将对象序列化为标准的JSON字符串,并设置请求头Content-Type: application/json,和你提供的Curl示例完全一致,这样服务器就能正确识别并处理请求了。
内容的提问来源于stack exchange,提问作者Richard Spain
相关产品推荐
相关产品推荐

