提问者:小点点

用RestSharp将Curl转换为C#


我正在尝试使用RestSharp将这个curl命令转换为C#,但在数据参数方面遇到了特别的问题(在本例中,token和uri变量已被替换为/dummy值):

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'UserToken: usertoken' --header 'AppToken: apptoken' -d '[{"individualRecordNumber":"foo","score":"bar"}]' 'apiEndpoint'

我已经能够在同一个API中成功地完成几个GET请求,所以我对整个请求格式和头都很熟悉,我只是在弄清楚如何格式化数据以及在哪里追加数据方面遇到了问题。下面是没有数据的请求的其余部分:

var client = new RestClient(apiEndpoint);
var request = new RestRequest(Method.POST);
request.AddHeader("usertoken", usertoken);
request.AddHeader("apptoken", apptoken);
request.AddHeader("content-type", "application/json");
    
IRestResponse response = client.Execute(request);

我尝试将AddParameter和AddJsonBody用于数据的各种序列化和非序列化版本的组合。

直接将数据构建为字符串的示例:

string examInfo = @"[{""individualRecordNumber"":""foo"",""score"":""bar""}]";

将数据构建为对象的示例:

object[] arrayObj = new object[1];
arrayObj[0] = new { individualRecordNumber = "foo", score = "bar" };

这是一个项目与一个极其紧密的周转,所以任何帮助是非常感激的!


共1个答案

匿名用户

如果您需要一个Post,为了“连接”Post主体,AddParameter有这个重载

request.AddParameter("application/json", "mybody", ParameterType.RequestBody);

或者,在你的情况下

request.AddParameter("application/json", examInfo, ParameterType.RequestBody);

但可能更好(如果你有更高的版本)

request.AddJsonBody(new { A = "foo", B = "bar" });

以及初始构造函数:(您似乎已经有了,但请注意,以备将来的读者使用)

var request = new RestRequest(Method.POST);

更完整的示例:

var client = new RestClient("https:blahblahblah");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/json");

/* option1 */
request.AddParameter("application/json", "{mybody:'yes'}", ParameterType.RequestBody);

/* OR option 2 */
request.AddJsonBody(new { A = "foo", B = "bar" });

IRestResponse response = client.Execute(request);