首页 > 解决方案 > 从 Postman 发送 Json 返回代码 200,从 HttpClient 发送 Json 返回 503(您的分块 POST 数据太大无法上传)

问题描述

我正在使用他们的地址验证调用(https://onlinetools.ups.com/rest/AV)向 UPS 进行 api 调用。我之前曾成功从 UPS 调用不同的 Gets(例如:UPS Address Steen Level Validation)。

这是正在发送的json:

 {
    "AccessRequest": {
        "AccessLicenseNumber": "removed for security reasons",
        "UserId": "removed for security reasons",
        "Password": "removed for security reasons"
    },
    "AddressValidationRequest": {
        "Request": {
            "TransactionReference": {
                "CustomerContext": ""
            },
            "RequestAction": "AV"
        },
        "Address": {
            "City": "",
            "StateProvinceCode": "",
            "PostalCode": "98272"
        }
    }
}

在 PostMan 中,只有默认的 Headers 被使用: 在此处输入图像描述

这将使用我正在查找的数据成功返回,代码为:200。

在我的 .Net Standard 2.0 库中,我使用 HTTPClient(Microsoft.AspNet.WebApi.Client 5.2.7) 来调用 api。下面是我如何启动 HTTP 客户端(名为“ApiClient”的变量):

string api = _config["UPS_API_LINK"];
_apiClient = new HttpClient();
_apiClient.BaseAddress = new Uri(api);
_apiClient.DefaultRequestHeaders.Accept.Clear();
_apiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

现在我已经创建了要排列的模型,因此它发送的 Json 与 Postman 发送的 Json 完全相同。您将在下面的代码中看到,我通过自己对其进行序列化来仔细检查(我获取该字符串,将其复制到邮递员中,并像魅力一样工作)。所以我发送我的请求。我稍微缩短了代码来说明我的观点:

string json = JsonConvert.SerializeObject(request);
Debug.Print(json);
using (HttpResponseMessage response = await ApiClient.PostAsJsonAsync("/rest/AV", request))
{
    var content = await response.Content.ReadAsStringAsync();
}

以下是内容返回的内容:

<HTML><HEAD><TITLE>Weblogic Bridge Message</TITLE></HEAD> <BODY><H2>Failure of Web Server bridge:</H2><P><hr>Your chunked POST data is too large to upload.<hr> </BODY></HTML>

返回码是 503。那么有人可以引导我走向正确的方向吗?我只是不知道 HTTP 客户端发送的是什么让它变得如此之大以至于我得到了这个响应。令我惊讶的是,我对发送更多数据的 api 进行了另一个调用,并且它运行良好。任何建议,将不胜感激。

注意:我已经仔细检查了我使用正确的 URL 请求呼叫 在此处输入图像描述

更新:感谢 Nehorai,我发现我可以使用名为 RestSharp 的第三方 dll 进行 Api 调用。这个库完美无缺!虽然我很想知道为什么 HTTP 客户端在这种情况下不起作用。这是我下面使用 RestSharp 的代码,以防有人想看它:

var client = new RestClient("https://onlinetools.ups.com/rest/AV");
client.Timeout = -1;
var requestRest = new RestRequest(Method.POST);
requestRest.AddHeader("Content-Type", "application/json");
requestRest.AddJsonBody(request);
var result = await client.ExecutePostAsync<ZipInfo_RootResponse>(requestRest);

标签: c#apipostmanups

解决方案


在 postman 中,可以查看请求的代码片段,点击“代码”:

在此处输入图像描述

然后你可以选择语言,选择C#,你可以看到C#代码中的请求(你需要添加对RestSharp dll的引用)


推荐阅读