#c# #api #http-post
Вопрос:
Я пытаюсь использовать Ядро.ВебУтилы.ApiCall для получения информации из API. В основном пытаюсь создать отправку по API DHL. (У меня есть для этого тестовый ключ) Самая большая проблема для меня заключается в том, что сообщение об ошибке не показывает ничего, что могло бы помочь. Рядом со строкой, в которой произошла ошибка, нет «сообщения». Я понятия не имею, что происходит.
Вот фрагмент кода:
public static DHLShipmentResponse CreateAPIDHLShipment(DhlapiCall shipment, string apiKey)
{
string url = "https://api-gw.dhlparcel.nl/";
string urlParameters = "shipments";
var byteArray = Encoding.ASCII.GetBytes(apiKey ":");
var auth = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var postcontent = JsonConvert.SerializeObject(shipment);
var test = ApiCall.RunAsync<DHLShipmentResponse>(url, urlParameters, auth, postcontent);
var response = ApiCall.RunAsync<DHLShipmentResponse>(url, urlParameters, auth, postcontent).GetAwaiter().GetResult();
return response;
}
Довольно маленький, довольно простой, с несколькими тестами, чтобы посмотреть, смогу ли я что-нибудь найти, но безрезультатно.
Просто для хорошей меры я взял значение «PostContent», чтобы запустить его через почтальона, и не получил никаких проблем. Поэтому я уверен, что содержание правильное. Я дважды проверил URL-адрес, и снова все в порядке. И, насколько я смог выяснить, мы всегда использовали аутентификацию таким образом (токены на предъявителя).
Вот что я получаю через почтальона:
{
"shipmentId": "69028c6a-ce50-4f2e-9483-27fd0a8f72ec",
"product": "EPL-INT",
"pieces": [
{
"labelId": "69028c6a-ce50-4f2e-9483-27fd0a8f72ec",
"trackerCode": "SAMPLE0000180041",
"parcelType": "PALLET",
"pieceNumber": 1,
"weight": 0,
"labelType": "B2X_Generic_A4_Third"
}
],
"customsDeclarationId": "9a316738-3ef3-4471-9bd8-7c92deb50338"
}
И вот определение ответа:
public partial class DHLShipmentResponse
{
[JsonProperty("shipmentId")]
public Guid ShipmentId { get; set; }
[JsonProperty("product")]
public string Product { get; set; }
[JsonProperty("shipmentTrackerCode")]
public string ShipmentTrackerCode { get; set; }
[JsonProperty("pieces")]
public List<PieceResponse> Pieces { get; set; }
[JsonProperty("returnShipment")]
public ReturnShipmentResponse ReturnShipment { get; set; }
[JsonProperty("customsDeclarationId")]
public string CustomsDeclarationId { get; set; }
}
public partial class PieceResponse
{
[JsonProperty("labelId")]
public Guid LabelId { get; set; }
[JsonProperty("trackerCode")]
public string TrackerCode { get; set; }
[JsonProperty("printlessCode")]
public string PrintlessCode { get; set; }
[JsonProperty("parcelType")]
public string ParcelType { get; set; }
[JsonProperty("pieceNumber")]
public long PieceNumber { get; set; }
[JsonProperty("weight")]
public long Weight { get; set; }
[JsonProperty("dimensions")]
[JsonConverter(typeof(ParseStringConverter))]
public long Dimensions { get; set; }
[JsonProperty("labelType")]
public string LabeType { get; set; }
}
Я занимался этим несколько часов безрезультатно. Спасибо вам за помощь.
Ответ №1:
Нашел проблему. Это была проверка подлинности. Это не базовый жетон, это жетон на предъявителя. И мне не нужно превращать его в массив байтов перед отправкой.
Также я выучил это ядро.webutils-это НЕ пакет самородков, а одна из нашей библиотеки (я мог бы поклясться, что это не так).
Извините за потерю времени, хорошего дня