Я делаю вызов API для ИБП, используя их проверку адресации (https://onlinetools.ups.com/rest/AV). У меня был успешный вызов различных приемов от UPS до этого (пример: проверка уровня адреса UPS).
Вот отправляемый 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 есть используются только заголовки по умолчанию:
Возвращается успешно с данными, которые я ищу с кодом: 200.
В моем. Net Стандартная библиотека 2.0, я использую HTTPClient (Microsoft.As pNet .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();
}
Вот что возвращает содержимое:
<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, я обнаружил, что могу использовать стороннюю dll-библиотеку RestSharp для выполнения вызовов 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);