RestSharp发布一个JSON对象

Jam*_*ett 20 c# json restsharp

我试图用RestSharp发布以下JSON:

{"UserName":"UAT1206252627",
"SecurityQuestion":{
    "Id":"Q03",
    "Answer":"Business",
    "Hint":"The answer is Business"
},
}
Run Code Online (Sandbox Code Playgroud)

我认为我很接近,但我似乎正在努力使用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);
Run Code Online (Sandbox Code Playgroud)

我的安全问题类看起来像这样:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?是否有其他方式发布安全问题对象?

非常感谢.

Olu*_*emi 44

您需要在标头中指定内容类型:

request.AddHeader("Content-type", "application/json");
Run Code Online (Sandbox Code Playgroud)

AddParameter添加了基于Method的POST或URL查询字符串

我认为你需要像这样将它添加到身体:

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

  • 它对我有用:request.AddHeader("Content-Type","application/json; charset = utf-8"); request.AddJsonBody(yourobject); (4认同)

Jam*_*ett 21

再次感谢你的帮助.为了实现这一点,我必须将所有内容作为单个参数提交.这是我最后使用的代码.

首先,我做了几个名为Request Object和Security Question的类:

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; }
}
Run Code Online (Sandbox Code Playgroud)

然后我将它作为单个参数添加,并在发布之前将其序列化为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);
Run Code Online (Sandbox Code Playgroud)

它工作了!


Ete*_*l21 7

To post raw json body string, AddBody(), or AddJsonBody() methods will not work. Use the following instead

request.AddParameter(
   "application/json",
   "{ \"username\": \"johndoe\", \"password\": \"secretpassword\" }", // <- your JSON string
   ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)


Fun*_*Sax 5

看起来最简单的方法是让 RestSharp 处理所有序列化。您只需像这样指定 RequestFormat 即可。这是我针对我正在做的事情想到的。。

    public List<YourReturnType> Get(RestRequest request)
    {
        var request = new RestRequest
        {
            Resource = "YourResource",
            RequestFormat = DataFormat.Json,
            Method = Method.POST
        };
        request.AddBody(new YourRequestType());

        var response = Execute<List<YourReturnType>>(request);
        return response.Data;
    }

    public T Execute<T>(RestRequest request) where T : new()
    {
        var client = new RestClient(_baseUrl);

        var response = client.Execute<T>(request);
        return response.Data;
    }
Run Code Online (Sandbox Code Playgroud)