.Net передача данных JSON в метод Rest GET - PullRequest
0 голосов
/ 10 декабря 2018

Мне известно, что, как правило, отправка контента через GET-запрос невозможна!Тем не менее, я работаю над программным обеспечением для клиента, в котором существующая (производственная) служба веб-отдыха их приложения предоставляет следующий метод:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[JSONPBehaviorAttribute(callback = "callback")]       
CrmDataObject Connection(CrmDataObject crmData)

Я думаю, что этот метод должен быть "POST",но это GET, и на этом этапе я ничего не могу с этим поделать, так как этот код находится в производстве, и есть несколько сторонних программ, которые вызывают эту функцию.

Я, однако, попытался написатьпростой клиент, чтобы вызвать этот метод и продолжать сбой по очевидным причинам:

    var req = HttpWebRequest.Create(url);
    req.Method = "GET";
    req.ContentType = "application/json";
    byte[] bytes = UTF8Encoding.UTF8.GetBytes(s);

    req.ContentLength = bytes.Length;

    using (var stream = req.GetRequestStream())
    {
       stream.Write(bytes, 0, bytes.Length);
    }

Я получаю «Не удается отправить тело содержимого с этим типом глагола», логически.

Как получаютсяСторонние приложения, способные вызывать этот метод и передавать параметр json?Возможно ли это сделать в .Net?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

GET специально не допускает тело запроса, поэтому вы получаете "Cannot send a content-body with this verb-type".

Обычно вы передаете параметры GET через URL, обычно в строке запроса (например, "path/to/page?param1=value1&param2=value2").Прошло много времени с тех пор, как я сделал WCF, но я думаю, что это на самом деле сработает, если свойства вашего типа (CrmDataObject) соответствуют строке запроса - хотя я бы подумал, что вы должны иметь BodyStyle = WebMessageBodyStyle.WrappedRequest.

Если у вас есть работающий клиентский код, в идеале вы могли бы сделать запрос, когда у вас есть отладчик, связанный с точкой останова в начале этой функции, а затем вы можете увидеть исходный URL-адрес запроса.(в объекте Request), а также в том, что было заполнено в crmData.

var req = HttpWebRequest.Create(url + "?name=value1&name2=value2");
0 голосов
/ 10 декабря 2018

Несмотря на то, что для лучшего предложения требуется много информации, я думаю, что ваша проблема может быть связана с привязкой параметра

¿Пробовали ли вы передать параметры в URL?например:

www.myurl.com/Connection?param1=hello&param2=world

Примите во внимание, что имя каждого параметра в URL-адресе должно соответствовать свойству в объекте CrmDataObject, который должен анализироваться механизмом связывания модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...