RestSharp JSON POST 请求遇到错误请求
Bad request encountered with RestSharp JSON POST request
我正在使用 RestSharp 发出一个包含 JSON 正文的 POST 请求。但是我收到一个 Bad request 错误。
因为我的 JSON 中有 []
和 ""
我决定使用 Newtonsoft.Json 。在使用它之前,我什至看不到正在形成的 JSON 请求。
我愿意尝试 MS httpwebrequest
作为替代方案。
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
var myObject = "{ \"target\" : \"[5,5]\", \"lastseen\" : \"1555459984\" }";
var json = JsonConvert.SerializeObject(myObject);
restRequest.AddParameter("application/json", ParameterType.RequestBody);
restRequest.AddJsonBody(json);
请注意,我正在尝试将 JSON curl 转换为 C#。请看下面:
curl -H 'Content-Type: application/json' -X POST -d '{ "target" : [5, 5], "lastseen" : "1555459984", "previousTargets" : [ [1, 0], [2, 2], [2, 3] ] }' http://santized/santized/santized
您似乎过度序列化要发送的数据。
考虑创建一个对象,然后将其传递给 AddJsonBody
。
//...
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
var myObject = new {
target = new []{ 5, 5 },
lastseen = "1555459984",
previousTargets = new []{
new [] { 1, 0 },
new [] { 2, 2 },
new [] { 2, 3 }
}
};
restRequest.AddJsonBody(myObject); //this will serialize the object and set header
//...
AddJsonBody
将内容类型设置为 application/json
并将对象序列化为 JSON 字符串。
为什么不只是这个?
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
var myObject = "{ \"target\" : \"[5,5]\", \"lastseen\" : \"1555459984\" }";
restRequest.AddParameter("application/json", ParameterType.RequestBody);
restRequest.AddJsonBody(json);
删除了序列化 json 字符串的行。
您还可以使用:
public class RootObject
{
public string target { get; set; }
public string lastseen { get; set; }
}
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
RootObject myObject = new RootObject();
myObject.target = "[5,5]";
myObject.lastseen = "1555459984";
var json = JsonConvert.SerializeObject(myObject);
restRequest.AddParameter("application/json", ParameterType.RequestBody);
restRequest.AddJsonBody(json);
你可以做这个例子:
public static IRestRequest PostInformationAndPassToken(JsonObject tokenString, string path, string whatistobePosted)
{
IRestRequest request = new RestRequest(path, Method.POST);
request.AddHeader("Authorization", $"Bearer {tokenString["Token"]}");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddParameter(whatistobePosted, ParameterType.RequestBody);
return request;
}
我正在使用 RestSharp 发出一个包含 JSON 正文的 POST 请求。但是我收到一个 Bad request 错误。
因为我的 JSON 中有 []
和 ""
我决定使用 Newtonsoft.Json 。在使用它之前,我什至看不到正在形成的 JSON 请求。
我愿意尝试 MS httpwebrequest
作为替代方案。
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
var myObject = "{ \"target\" : \"[5,5]\", \"lastseen\" : \"1555459984\" }";
var json = JsonConvert.SerializeObject(myObject);
restRequest.AddParameter("application/json", ParameterType.RequestBody);
restRequest.AddJsonBody(json);
请注意,我正在尝试将 JSON curl 转换为 C#。请看下面:
curl -H 'Content-Type: application/json' -X POST -d '{ "target" : [5, 5], "lastseen" : "1555459984", "previousTargets" : [ [1, 0], [2, 2], [2, 3] ] }' http://santized/santized/santized
您似乎过度序列化要发送的数据。
考虑创建一个对象,然后将其传递给 AddJsonBody
。
//...
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
var myObject = new {
target = new []{ 5, 5 },
lastseen = "1555459984",
previousTargets = new []{
new [] { 1, 0 },
new [] { 2, 2 },
new [] { 2, 3 }
}
};
restRequest.AddJsonBody(myObject); //this will serialize the object and set header
//...
AddJsonBody
将内容类型设置为 application/json
并将对象序列化为 JSON 字符串。
为什么不只是这个?
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
var myObject = "{ \"target\" : \"[5,5]\", \"lastseen\" : \"1555459984\" }";
restRequest.AddParameter("application/json", ParameterType.RequestBody);
restRequest.AddJsonBody(json);
删除了序列化 json 字符串的行。
您还可以使用:
public class RootObject
{
public string target { get; set; }
public string lastseen { get; set; }
}
restClient = new RestClient();
restRequest = new RestRequest(ApiUrl, Method.POST, DataFormat.Json);
RootObject myObject = new RootObject();
myObject.target = "[5,5]";
myObject.lastseen = "1555459984";
var json = JsonConvert.SerializeObject(myObject);
restRequest.AddParameter("application/json", ParameterType.RequestBody);
restRequest.AddJsonBody(json);
你可以做这个例子:
public static IRestRequest PostInformationAndPassToken(JsonObject tokenString, string path, string whatistobePosted)
{
IRestRequest request = new RestRequest(path, Method.POST);
request.AddHeader("Authorization", $"Bearer {tokenString["Token"]}");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddParameter(whatistobePosted, ParameterType.RequestBody);
return request;
}