【问题标题】:How to add json to RestSharp POST request如何将 json 添加到 RestSharp POST 请求
【发布时间】:2016-08-25 19:23:53
【问题描述】:

我有以下 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 字符串添加到请求正文中?

【问题讨论】:

    标签: c# json restsharp


    【解决方案1】:

    我也遇到过这个问题。试试这样的东西,而不是AddJsonBody。

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

    【讨论】:

    • 当 API cal 需要正文而不是参数时,此解决方案有效。 RestSharp 似乎无法正确查看,因为即使这样做并在调试器中查看请求,它也会将主体显示为空,而不是将其放在参数槽中。似乎无法知道参数是否实际上是来自请求对象的主体。但总而言之,这个解决方案效果很好。
    【解决方案2】:

    这应该可行:

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

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

    【讨论】:

      【解决方案3】:

      我试过这样,它工作正常,添加带有令牌的承载

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        • 1970-01-01
        • 2021-02-11
        • 2017-01-16
        • 1970-01-01
        相关资源
        最近更新 更多