#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. Вот два решения для решения вашей проблемы:
-
Измените тип запроса на
POST
вместоGET
(type: "POST"
) -
Удалите свой
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();