Программная обработка запроса GET

#c# #jquery

#c# #jquery

Вопрос:

Допустим, у меня был следующий запрос Jquery

    $.ajax({
            type: "GET",
            url: "http://localhost:8501/exampleservice.svc/rest/Start",
            contentType: "application/json; charset=utf-8",
            processData: false,
            data: { confirmationNum : '90210' },
            dataType: "json",
            success: function (data, status, xhr)
            {
            },
            error: function (xhr, status, error)
            {
            },
            complete: function (xhr, status)
            {
            }
        });
  

Каков правильный способ сделать это правильно в C #?
Я попробовал следующее с ошибкой, возникающей в потоке данных:

«Необработанное исключение типа ‘System.Net.ProtocolViolationException’ «

 string biometricURL = "http://localhost:8501/exampleservice.svc/rest/Start";
byte[] jsonData = new ASCIIEncoding().GetBytes("{ confirmationNum : '90210' }");
WebRequest request;
request = WebRequest.Create(biometricURL);
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = jsonData.Length;
request.Credentials = CredentialCache.DefaultCredentials;

Stream dataStream = request.GetRequestStream();
dataStream.Write(jsonData, 0, jsonData.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)getBiometricCapture.GetResponse();
  

Комментарии:

1. вам не нужно устанавливать contentType: "application/json; charset=utf-8" , если вы уже указали dataType: "json"

2. вы проверили, является ли метод GET?

Ответ №1:

Запрос GET не имеет тела / содержимого. В результате, используя:

 Stream dataStream = request.GetRequestStream();
dataStream.Write(jsonData, 0, jsonData.Length);
dataStream.Close();
  

может вызвать «System.Net.ProtocolViolationException».

Если вы хотите передать пользовательские данные через запрос GET, добавьте пользовательские параметры через строку запроса или заголовки.

В противном случае вместо этого используйте запрос POST.

Ответ №2:

Дело здесь в том, что у вас есть тело в вашем запросе GET. Вот два решения для решения вашей проблемы:

  1. Измените тип запроса на POST вместо GET ( type: "POST" )

  2. Удалите свой contentType: "application/json; charset=utf-8" параметр. ContentType бесполезно, если вы выполняете GET запрос. GET запросы не должны иметь content-type, потому что у них нет объекта запроса.

Ответ №3:

Как уже ответили другие пользователи, вы не передаете объекты JSON в теле содержимого для запроса GET. Однако использование метода post, как они предлагают, не является RESTful, что, похоже, вы пытаетесь создать на основе семантики вашего примера URL.

В RESTful services простые средства доступа реализуются с параметрами, передаваемыми в виде фрагментов пути URL (исключение обычно составляют сложные запросы, в этом случае вы используете переменные запроса в URL или POST). Это не относится к вам, поскольку вы получаете доступ по простому идентификатору. Так, например, если вы пытаетесь получить ресурс BiometricCapture с идентификатором 12345, вы должны получить доступ к URL:

http://localhost:8501/exampleservice.svc/rest/biocaptures/12345

Ответ №4:

Включил данные как часть URL-адреса, подобного этому.

 HttpWebRequest request =   (HttpWebRequest)HttpWebRequest.Create("http://localhost:8501/exampleservice.svc/rest/Start?confirmationNum='90210'");
            request.Method = "GET";
            request.ContentType = "application/json; charset=utf-8";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();