【发布时间】:2021-05-17 17:53:04
【问题描述】:
我正在使用 RestSharp,并且我认为 API 是使用 Azure 设置的。我向 API 发出 POST 请求,但注意到该请求仅在 body 被命名为 Postman 中的“agentGetRequest”时才有效。
坏身体:
{
"supplierKey": "XXXX-XXXX-XXXX-XXXX",
"inputDate": "2021-01-17T00:00:00.000Z"
}
好身材:
{
"agentGetRequest": {
"supplierKey": "XXXX-XXXX-XXXX-XXXX",
"inputDate": "2021-01-17T00:00:00.000Z"
}
}
所以当我运行我的代码时
void Post(AgentRequest agentRequest, Credentials creds )
{
Uri baseUrl = new Uri(creds.baseURL);
IRestClient client = new RestClient(baseUrl);
IRestRequest request = new RestRequest(ENDPOINT, Method.POST);
request.AddHeader("subscriptionKey", creds.subscriptionKey);
// Option 1:
request.AddJsonBody(agentRequest);
// Option 2:
request.AddJsonBody(agentRequest, "agentGetRequest")
IRestResponse<GetAgentResponse> response = client.Execute<GetAgentResponse>(request);
if (response.IsSuccessful)
{
Console.WriteLine(JsonConvert.SerializeObject(response.Content));
}
else
{
Console.WriteLine(response.ErrorMessage);
}
}
// Body request object
public class AgentRequest
{
public string inputDate { get; set; }
public string supplierKey { get; set; }
}
它会抛出一个错误的请求错误,因为它找不到正文“agentRequest”。
我找到了一种解决方法,我将字符串作为正文提供给它 - 但这会讨厌必须为每个端点都这样做:
// Instead of request.AddJsonBody()...
string body = "{\"agentGetRequest\": {\"supplierKey\": \"XXXX-XXXX-XXXX-XXXX\",\"inputDate\": \"2021-0117T00:00:00.000Z\"}}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
通过 AddJsonBody 添加正文以包含名称(可能还有封装括号)时,如何正确格式化正文?
【问题讨论】:
-
查看 RestSharp 发布 JSON 对象的 answer。您想要的“名称”也可以是 JSON 结构的一部分,这意味着它的属性。
标签: c# json.net restsharp rest