如何在RestSharp POST请求中添加json

本文关键字:添加 json 请求 POST RestSharp | 更新日期: 2023-09-27 18:04:15

我有以下JSON字符串传递到我的c#代码作为字符串参数- AddLocation(string locationJSON):

{"accountId":"57abb4d6aad4","address":{"city":"TEST","country":"TEST","postalCode":"TEST","state":"TEST","street":"TEST"},"alternateEmails":[{"email":"TEST"}],"alternatePhoneNumbers":[{"phoneNumber":"TEST"}],"alternateWebsites":[{"website":"TEST"}],"auditOnly":false,"busName":"593163b7-a465-43ea-b8fb-e5b967d9690c","email":"TEST EMAIL","primaryKeyword":"TEST","primaryPhone":"TEST","rankingKeywords":[{"keyword":"TEST","localArea":"TEST"}],"resellerLocationId":"5461caf7-f52f-4c2b-9089-2ir8hgdy62","website":"TEST"}

我正试图将JSON添加到RestSharp POST请求,但它不工作:

public string AddLocation(string locationJSON)
{
    var client = new RestClient(_authorizationDataProvider.LocationURL);
    var request = new RestRequest(Method.POST);
    request.RequestFormat = DataFormat.Json;
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Authorization", _authorizationResponse.Token);
    ...
    request.AddJsonBody(locationJSON);
    var response = client.Execute(request);
}

响应返回为"错误请求"。如果我在调试器中检查响应,我会得到以下结果:

{"code":"invalid_json","details":{"obj.address":[{"msg":["error.path.missing"],"args":[]}],"obj.rankingKeywords":[{"msg":["error.path.missing"],"args":[]}],"obj.alternatePhoneNumbers":[{"msg":["error.path.missing"],"args":[]}],"obj.busName":[{"msg":["error.path.missing"],"args":[]}],"obj.accountId":[{"msg":["error.path.missing"],"args":[]}],"obj.alternateEmails":[{"msg":["error.path.missing"],"args":[]}],"obj.alternateWebsites":[{"msg":["error.path.missing"],"args":[]}],"obj.email":[{"msg":["error.path.missing"],"args":[]}],"obj.primaryKeyword":[{"msg":["error.path.missing"],"args":[]}],"obj.auditOnly":[{"msg":["error.path.missing"],"args":[]}]}}

我在调用AddJsonBody后检查了请求参数,值似乎包括双引号的转义序列-这似乎是问题。

{'"accountId'":'"57abb4d6aad4def3d213c25d'",'"address'":{'"city'":'"TEST'",'"country'":'"TEST'",'"postalCode'":'"TEST'",'"state'":'"TEST'",'"street'":'"TEST'"},'"alternateEmails'":[{'"email'":'"TEST'"}],'"alternatePhoneNumbers'":[{'"phoneNumber'":'"TEST'"}],'"alternateWebsites'":[{'"website'":'"TEST'"}],'"auditOnly'":false,'"busName'":'"84e7ef98-7a9f-4805-ab45-e852a4b078d8'",'"email'":'"TEST EMAIL'",'"primaryKeyword'":'"TEST'",'"primaryPhone'":'"TEST'",'"rankingKeywords'":[{'"keyword'":'"TEST'",'"localArea'":'"TEST'"}],'"resellerLocationId'":'"06b528a9-22a6-4853-8148-805c9cb46941'",'"website'":'"TEST'"}

所以我的问题是我如何添加一个json字符串到请求体?

如何在RestSharp POST请求中添加json

我也遇到过这个问题。试试这样代替AddJsonBody

request.AddParameter("application/json", locationJSON, ParameterType.RequestBody);

应该可以:

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

如果直接添加序列化对象,问题是Json转换在每个"之前添加"'"。

我已经尝试过了,它工作得很好,添加承载令牌

 request.AddHeader("cache-control", "no-cache");
 request.AddHeader("authorization", "Bearer " + "your token key");
 request.AddHeader("accept", "application/json");