Sending Json from Postman returns code 200, Sending Json from HttpClient returns 503(Your chunked POST data is too large to upload)
Sending Json from Postman returns code 200, Sending Json from HttpClient returns 503(Your chunked POST data is too large to upload)
我正在使用他们的地址验证呼叫 (https://onlinetools.ups.com/rest/AV) 向 UPS 发出 api 呼叫。我之前已经成功地从 UPS 调用了不同的 Gets(例如:UPS 地址 Streen 级别验证)。
这是正在发送的 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 被使用:
这 return 成功地使用了我正在寻找的数据,代码: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 完全相同。你会看到下面的代码,我通过自己序列化它来仔细检查它(我拿那个字符串,将它复制到邮递员中,并且像一个魅力一样工作)。所以我发送我的请求。我稍微缩短了代码以说明我的观点:
string json = JsonConvert.SerializeObject(request);
Debug.Print(json);
using (HttpResponseMessage response = await ApiClient.PostAsJsonAsync("/rest/AV", request))
{
var content = await response.Content.ReadAsStringAsync();
}
内容如下returns:
<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>
return 代码是 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);
在邮递员中,您可以查看请求的代码片段,点击"Code":
然后你可以 select 语言,select C# 你可以在 C# 代码中看到请求(你需要添加对 RestSharp dll 的引用)
我正在使用他们的地址验证呼叫 (https://onlinetools.ups.com/rest/AV) 向 UPS 发出 api 呼叫。我之前已经成功地从 UPS 调用了不同的 Gets(例如:UPS 地址 Streen 级别验证)。
这是正在发送的 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 被使用:
这 return 成功地使用了我正在寻找的数据,代码: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 完全相同。你会看到下面的代码,我通过自己序列化它来仔细检查它(我拿那个字符串,将它复制到邮递员中,并且像一个魅力一样工作)。所以我发送我的请求。我稍微缩短了代码以说明我的观点:
string json = JsonConvert.SerializeObject(request);
Debug.Print(json);
using (HttpResponseMessage response = await ApiClient.PostAsJsonAsync("/rest/AV", request))
{
var content = await response.Content.ReadAsStringAsync();
}
内容如下returns:
<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>
return 代码是 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);
在邮递员中,您可以查看请求的代码片段,点击"Code":
然后你可以 select 语言,select C# 你可以在 C# 代码中看到请求(你需要添加对 RestSharp dll 的引用)