Использование [FromBody] в методе GET контроллера WebApi

Итак, я знаю, как использовать [FromUri] и [FromBody] в методе Post моего контроллера WebApi. Излишне говорить, что [FromUri] в методе Get не нужен, но является явным и работает хорошо. Моя проблема в том, что я хочу, чтобы WebApi анализировал мой HttpBody в методе Get для заполнения моего параметра объекта. Как это...

public IHttpActionResult Get([FromBody]Customer c) {
   if (c is null) {
      // problem :-(
   }
}

Во-первых, позвольте мне объяснить, почему я хочу это сделать. Это потому, что мой URL-адрес Get сложный. Мне нужно включить в него объект JSON. Поэтому, хотя я знаю, что использование HTTP Body для полезной нагрузки в Get не является идеальным REST, я хотел бы это сделать.

Во-вторых, для тех, кто думает, что я должен просто включить его в URL-адрес... ладно, хорошо. Однако тогда, пожалуйста, скажите мне, как проверить, потому что я пытался ввести объект JSON в URL-адресе, браузер процитировал его, НО даже с [FromUri] в моем методе Get WebApi Controller я не могу заставить его проанализировать. Я также пробовал curl через Swagger, но та же проблема.

Мой объект JSON просто { "a" : "A", "b" : "B" }.

Заранее благодарю за любую помощь.


person griftopia    schedule 25.10.2018    source источник
comment
Согласно https://stackoverflow.com/questions/978061/http-get-with-request-body никогда не рекомендуется использовать GET с телом.   -  person stannius    schedule 26.10.2018
comment
Возможный дубликат WebApi: как сделать запрос на получение со сложным объектом?   -  person stannius    schedule 26.10.2018
comment
@станниус. Хорошо, я понимаю. Не каламбур. Не могли бы вы рассказать мне, как я могу отправить объект JSON по URL-адресу?   -  person griftopia    schedule 26.10.2018
comment
Моя проблема в том, что мой объект JSON не исправлен. Это как словарь. Он может иметь несколько параметров. иногда 1 иногда 4. Вот почему мне нужен объект JSON на первом месте. Однако, когда я вставляю его в URL-адрес, он не работает с использованием [FromUri]. Я всегда получаю нулевой объект,   -  person griftopia    schedule 26.10.2018
comment
Как вы создаете запрос? jQuery?   -  person stannius    schedule 26.10.2018
comment
@stannius Нет. Как я указал выше, я пробовал Swagger, но, по-видимому, в нем есть известная ошибка / недостаток, который не позволяет. И я попытался ввести его в URL. Я знаю, что если бы я мог поместить его в HTTP Body, как я делаю это для методов Post(), он будет анализировать его в объект Dictionary. Поэтому мне либо нужно (а) использовать [FromUri] и выяснить, как ввести объект JSON в URL-адрес с помощью Get, ИЛИ (б) использовать [FromBody] и каким-то образом заставить его работать с Get. Ни один из вариантов мне не подходит.   -  person griftopia    schedule 27.10.2018
comment
Если вы посмотрите на вторую ссылку, которую я прокомментировал выше, кажется, что вам нужно добавить каждое из свойств объекта в качестве параметра строки запроса: url.../?a=A&b=B У вас может быть динамическое количество параметров. Я предполагаю, что любые свойства, которые вы не передаете, поскольку параметры инициализируются значениями по умолчанию.   -  person stannius    schedule 27.10.2018
comment
Просто для ясности: у вас гораздо больше шансов добиться успеха с использованием [FromUri] и выяснить, как ввести объект JSON в URL-адрес с помощью Get.   -  person stannius    schedule 29.10.2018
comment
@станниус. Вот вам громко и ясно. Тем не менее, я знаю, как ввести строку объекта JSON, LOL. Должно быть, я что-то еще делаю не так, поэтому сегодня после перерыва снова захожу сюда. Будет обновлять как можно скорее.   -  person griftopia    schedule 31.10.2018
comment
Так что перерыв помог (я думаю). Проблема в том, что я привык иметь Dictionary‹string,string› в моих объектах модели, когда я отправляю данные JSON с помощью [FromBody]. С [FromUri] я должен получить данные в виде необработанной строки, а затем явно преобразовать в Dictionary‹string, string›. Я думал, что Web Api сделает это за меня, но это не так. Так что на данный момент, по крайней мере, я прошел свою проблему.   -  person griftopia    schedule 31.10.2018
comment
вы можете преобразовать свой параметр JSON в формат base64 и передать его как обычный строковый параметр в методе get, затем на стороне службы преобразовать этот параметр из base64 в строку (необработанный json), теперь вы можете десериализовать этот json в любой класс, который вы знаете   -  person Bijan Ghasemi    schedule 02.11.2018