С запросом RestSharp JSON POST обнаружен неправильный запрос - PullRequest
0 голосов
/ 17 апреля 2019

Я использую RestSharp, чтобы сделать запрос POST, содержащий тело JSON. Но я получаю ошибку 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

Ответы [ 4 ]

3 голосов
/ 17 апреля 2019

Вы, кажется, слишком сериализовали данные для отправки.

Попробуйте создать объект и затем передать его 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.

1 голос
/ 17 апреля 2019

Почему не только это?

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.

0 голосов
/ 17 мая 2019

вы можете сделать этот пример:

  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;
    }
0 голосов
/ 17 апреля 2019

Вы также можете использовать:

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);
...