Member 10028394 Ответов: 1

Передача данных через API


Я хочу отправить данные через asp.net контроллер mvc, php-код приведен ниже

For Example in PHP 

$string = '{"Validation":[{"ApiKey":""}],"ShipmentDetail":[{"OriginCity":"","ConsigneeName":"","ConsigneeAddress":"","ConsigneeEmail":"","ConsigneeContact":"","ShipmentReference":"","DestinationCity":"","Peices":"","Weight":"","FragileRequired":"","InsuranceRequired":"","CashCollectRequired":"","ShipperComment":"","CashCollect":"","ProductDetail":""}]}'; 

$result = file_get_contents("http://abc.com/portal/api/book.php?".urlencode($string)); 


Что я уже пробовал:

Я пытаюсь отправить данные через asp.net контроллер mvc приведен ниже

var formFields = new[] {
           new KeyValuePair<string,string>("ApiKey","B855002463553A5B"),
           new KeyValuePair<string,string>("OriginCity","CKL"),
           new KeyValuePair<string,string>("ConsigneeName","asif"),
           new KeyValuePair<string,string>("ConsigneeAddress","Mughalpura"),
           new KeyValuePair<string,string>("ConsigneeEmail","asif@gmail.com"),
           new KeyValuePair<string,string>("ConsigneeContact","03344123546"),
           new KeyValuePair<string,string>("ConsigneeReference","Hassan"),
           new KeyValuePair<string,string>("DestinationCity","DGK"),
           new KeyValuePair<string,string>("Peices","1"),
           new KeyValuePair<string,string>("Weight","0.5"),
           new KeyValuePair<string,string>("FragileRequired","Y"),
           new KeyValuePair<string,string>("InsuranceRequired","N"),
           new KeyValuePair<string,string>("CashCollectRequired","Y"),
           new KeyValuePair<string,string>("ShipperComment","No"),
           new KeyValuePair<string,string>("CashCollect","1000"),
           new KeyValuePair<string,string>("ProductDetail","Special")
           };
           var postData = formFields.Aggregate("", (current, pair) => current + (pair.Key + ":" + HttpUtility.UrlEncode(pair.Value) + ","));
           var client = new WebClient();
           client.Headers.Add("Content-Type", "application/json");
           var result = client.UploadString("http://abc.com/portal/api/book.php", postData);


приведенный выше код выдает ошибку " неправильный ключ API"

1 Ответов

Рейтинг:
1

Richard Deeming

Ваш API явно ожидает формат JSON[^] тело. То, что вы отправляете, не является JSON.

Создайте объект с ожидаемой структурой, а затем используйте такой инструмент, как Json.NET[^], чтобы создать действительный JSON-строку :

var postData = new
{
    Validation = new[]
    {
        new { ApiKey = "B855002463553A5B" },
    },
    ShipmentDetail = new[]
    {
        new
        {
            OriginCity = "CKL",
            ConsigneeName = "asif",
            ConsigneeAddress = "Mughalpura",
            ConsigneeEmail = "asif@gmail.com",
            ConsigneeContact = "03344123546",
            ShipmentReference = "Hassan",
            DestinationCity = "DGK",
            Peices = 1,
            Weight = 0.5,
            FragileRequired = "Y",
            InsuranceRequired = "N",
            CashCollectRequired = "Y",
            ShipperComment = "No",
            CashCollect = 1000,
            ProductDetail = "Special",
        },
    },
};

string jsonData = JsonConvert.SerializeObject(postData);

var client = new WebClient();
client.Headers.Add("Content-Type", "application/json");
string result = client.UploadString("http://abc.com/portal/api/book.php", jsonData);

Если вам нужно сделать GET запрос, как это делает ваш PHP-код:
string jsonData = JsonConvert.SerializeObject(postData);
string query = Uri.EscapeUriString(jsonData);

var client = new WebClient();
string result = client.DownloadString("http://abc.com/portal/api/book.php?" + query);


Member 10028394

Я делаю то же самое, что и вы сказали выше, но тот же вопрос приведу ниже
"{\"Response\": [{\"Type\":\ " Error\",\ " Message\":\ " Wrong API Key\"}]}"
пока на успехе
"{\"Ответ\": [{\"тип\":\ " ОК\",\"сообщение\":\ " 123456789\"}]}"

Richard Deeming

Тогда либо указанный вами ключ API недействителен, либо структура объекта не соответствует ожидаемому API.

Richard Deeming

Еще раз взглянув на свой пример PHP, вы передаете JSON в строке запроса (ля GET запрос), в то время как ваш код C# передает его в теле (ля POST запрос).

Работает ли PHP-код? Если да, то вам нужно будет сделать GET запрос из кода C#.

Member 10028394

Спасибо! Ричард Диминг, моя проблема решена.
Еще раз большое спасибо

Member 10028394

результат строки = клиент.DownloadString("http://abc.com/portal/api/book.php?" + запрос);

вышеизложенное дает результат ниже

{"Ответ": [{"Тип": "ОК", "Номер Отгрузки": "123456789"}]}

я хочу получить номер отгрузки "123456789" в переменной string или int
я пробую приведенное ниже, но получаю нулевое значение
JObject obj = JObject. Parse(результат);
string name = (string )obj ["ShipmentNumber"];

Пожалуйста, скажите мне, как получить номер доставки?

Richard Deeming

Любой:

JObject obj = JObject.Parse(result);
string shipmentNumber = (string)obj["Response"][0]["ShipmentNumber"];

Или:
dynamic obj = JObject.Parse(result);
string shipmentNumber = obj.Response[0].ShipmentNumber;

Member 10028394

Спасибо! Ричард Диминг
Еще раз большое спасибо