Подтвердить что ты не робот

RestSharp Опубликовать объект JSON

Я пытаюсь опубликовать следующий JSON с RestSharp:

{"UserName":"UAT1206252627",
"SecurityQuestion":{
    "Id":"Q03",
    "Answer":"Business",
    "Hint":"The answer is Business"
},
}

Я думаю, что я близок, но я, кажется, борюсь с SecurityQuestion (API бросает ошибку, говоря, что параметр отсутствует, но он не говорит, какой)

Это код, который у меня есть до сих пор:

var request = new RestRequest("api/register", Method.POST);
request.RequestFormat = DataFormat.Json;

request.AddParameter("UserName", "UAT1206252627");

SecurityQuestion securityQuestion = new SecurityQuestion("Q03");
request.AddParameter("SecurityQuestion", request.JsonSerializer.Serialize(securityQuestion));

IRestResponse response = client.Execute(request);

И мой класс Security Question выглядит следующим образом:

public class SecurityQuestion
{
    public string id {get; set;}
    public string answer {get; set;}
    public string hint {get; set;}

    public SecurityQuestion(string id)
    {
         this.id = id;
         answer = "Business";
         hint = "The answer is Business";
    }
}

Может ли кто-нибудь сказать мне, что я делаю неправильно? Есть ли другой способ опубликовать объект "Вопрос безопасности"?

Большое спасибо.

4b9b3361

Ответ 1

Вам нужно указать тип содержимого в заголовке:

request.AddHeader("Content-type", "application/json");

Также AddParameter добавляет к Querystring POST или URL-адреса на основе метода

Я думаю, вам нужно добавить его в тело следующим образом:

request.AddJsonBody(
    new 
    {
      UserName = "UAT1206252627", 
      SecurityQuestion = securityQuestion
    }); // AddJsonBody serializes the object automatically

Ответ 2

Еще раз спасибо за вашу помощь. Чтобы получить эту работу, я должен был представить все как один параметр. Это код, который я использовал в конце.

Сначала я сделал пару классов под названием "Запрос объекта и вопрос безопасности":

public class SecurityQuestion
{
    public string Id { get; set; }
    public string Answer { get; set; }
    public string Hint { get; set; }
}

public class RequestObject
{
    public string UserName { get; set; }
    public SecurityQuestion SecurityQuestion { get; set; }
}

Затем я просто добавил его как единственный параметр и сериализую его в JSON перед его отправкой, например:

var yourobject = new RequestObject
            {
                UserName = "UAT1206252627",
                SecurityQuestion = new SecurityQuestion
                {
                    Id = "Q03",
                    Answer = "Business",
                    Hint = "The answer is Business"
                },
            };
var json = request.JsonSerializer.Serialize(yourobject);

request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

и это сработало!

Ответ 3

RestSharp, поддерживаемый объектом методом AddObject

request.AddObject(securityQuestion);