Вызовите услугу Rest ful, используя HttpWebRequest и метод PUT - PullRequest
1 голос
/ 07 июня 2019

Я вызываю Rest API Http Метод "PUT", я передаю данные JSON с помощью "API-KEY".Тот же запрос API работает в вызове jQuery Ajax, но не работает в C # с HttpWebRequest.Пожалуйста, смотрите сообщение об исключении: Сообщение об исключении Я получаю всегда ошибку:

"The remote server returned as error: (400) Bad Request"

Ниже приведен код C #:

StringBuilder jsonData = new StringBuilder();
jsonData.Append(@"""name"": """ + name + '"' + ",");
jsonData.Append(@"""tin"": """ + tin + '"' + ",");
jsonData.Append(@"""tinType"": ""U"",");
jsonData.Append(@"""checks"": ""DT""");
string URL = @"https://api.dev.gmc-pharmacy.com/tesmdm/dev/tesmdm/taxvalidation/";
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
    request.Method = "PUT";
    request.ContentType = "application/json";
    request.ContentLength = jsonData.Length;
    request.Headers.Add("GMC-API-KEY", "427b9574-27a6-4e21-8eea-c3e2a14e4ebe");
    request.ProtocolVersion = HttpVersion.Version10;
    byte[] postBytes = Encoding.UTF8.GetBytes(jsonData.ToString());        
    Stream requestStream = request.GetRequestStream();        
    requestStream.Write(postBytes, 0, postBytes.Length);
    requestStream.Close();
    try
    {        
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    string result;
    using (StreamReader rdr = new StreamReader(response.GetResponseStream()))
    {
        result = rdr.ReadToEnd();
    }}

Ниже приведен рабочий код в jQuery:

$("#btnTINSubmit").click(function() { 
var URL = "https://api.dev.gmc-pharmacy.com/tesmdm/dev/tesmdm/taxvalidation/";

var data = {
    name: $("#txtSupplierName").val(), // Supplier Name
    tin: $("#txtSupplierTIN").val(),
    tinType: "U",
    checks: "DT"
};
$.ajax({
    //url: getExactPath('/Supplier/TaxValidate'),
    url: URL,
    type: "PUT",        
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function(xhr) {
        xhr.setRequestHeader("GMC-API-KEY ", "427b9574-27a6-4e21-8eea-c3e2a14e4ebe");
    },
    success: function(data) {
        alert(data);
        $('#TINResponse').text(data.matchInfoResponse[0].matchResultResponse.message);
    },
    error: function(xhr, ajaxOptions, thrownError) {
        $('#TINResponse').text(xhr.response);

        alert(thrownError);
    }
});
});

Любая идея, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Я исправил формат строки json, как показано ниже. Теперь все идеально.

jsonData.Append(@"{""name"": """ + name + '"' + ",");
jsonData.Append(@"""tin"": """ + tin + '"' + ",");
jsonData.Append(@"""tinType"": ""U"",");
jsonData.Append(@"""checks"": ""DT""}");
0 голосов
/ 07 июня 2019

Ваши данные JSON не имеют фигурных скобок. Вы отправляете что-то вроде:

"name": "AdithyaM",
"tin": "x",
"tinType": "U",
"checks": "DT"

когда это должно быть как:

{
    "name": "AdithyaM",
    "tin": "x",
    "tinType": "U",
    "checks": "DT"
}

это, вероятно, причина того, что ваш сервер отвечает неправильным ответом на запрос, потому что он не распознает тело запроса

...