|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Всем привет, у меня есть ASP Core 3.0 контроллер с методом который принимает сложный фильтр в качестве параметра. Код: c# 1. 2. 3. 4. 5. 6. 7.
В качестве параметров для данного метода мне нужно переда 2 DateTime и 2 целочисленных массива. Поэтому пришлось перейти на [FromQuery] и соответственно создать обертку Код: c# 1. 2. 3. 4. 5. 6. 7.
Из Vue-js приложения с помощью axios делаю get-запрос Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В метод контроллера приходит getMarksAsyncParamsModel, у которой есть значения только у startDate и finalDate, массивы пустые. Пробовал вместо массивов использовать Ienumerable<int>, тогда приходит null. Строка запроса получается следующая: http://localhost:5000/EntryMark/GetMarks?startDate=2019-10-01T21:00:00.000Z&finalDate=2019-10-02T21:00:00.000Z&companiesfilter []=1&personfilter[]=12940&personfilter[]=7725&personfilter[]=705&personfilter[]=3974 Знаю, что можно сделать POST-запрос и тогда все заработает, но все же хотелось чтобы использовался именно GET, чтобы не противоречить семантике методов HTTP. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2019, 13:30 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
По идее, никаких квадратных скобок в запросе быть не должно, то есть так Код: c# 1.
тогда FromQuery должен отработать нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2019, 13:36 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Shocker.Pro, действительно параметр терялся из за [], осталось только понять почему axios пририсовывает квадратные скобки к array-параметрам. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2019, 13:49 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Как вариант, если совсем сложные запросы, то можно делать в два прохода: передаем запрос на сервер через POST, сохраняем его где-нибудь на сервере (в БД, напр.) с ключом, возвращаем ключ клиенту, затем клиент делает уже GET запрос с этим ключом в качестве параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2019, 14:10 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthat, так можно и в один проход сразу из POST-запроса вернуть всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2019, 14:34 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Получилось решить проблему следующим образом: импортирую npm qs Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2019, 15:53 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
vb_subfkthat, так можно и в один проход сразу из POST-запроса вернуть всё. Это некошерно. Возврат результатов поиска должен быть через GET. Это такой бест практис - запрос чего-то не изменяющий состояние сервера должен быть GET, а изменения на сервере это POST/PUT/DELETE. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 00:18 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatvb_subfkthat, так можно и в один проход сразу из POST-запроса вернуть всё. Это некошерно. Возврат результатов поиска должен быть через GET. Это такой бест практис - запрос чего-то не изменяющий состояние сервера должен быть GET, а изменения на сервере это POST/PUT/DELETE. Что за ерунда? Ты мешаешь бизнес-логику (поиск) с транспортной (GET/POST). Сложные объекты передаются через POST - что тут некошерного? " то можно делать в два прохода:" - когда коту делать нечего... fkthatзапрос чего-то не изменяющий состояние сервера должен быть GET, Протоколы посерьезней пацанов со скуля кладут на это. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 13:08 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatЭто некошерно. Возврат результатов поиска должен быть через GET. Это такой бест практис - запрос чего-то не изменяющий состояние сервера должен быть GET, а изменения на сервере это POST/PUT/DELETE. То, что GET должен быть идемпотентным -- да, однозначно POST может использоваться как GET в случаях, когда запрос представляет собой сложный объект, и чисто технически GET использовать невозможно. Кошерность тут не при чём, дас ист реальность ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 14:29 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
.. на другом форуме мне сказали, что POST для получения данных (не для создания сущности на сервере) мешает использовать кнопку "назад" в браузере (ну, то есть, не сохраняется история браузера) ... это просто комментарий, не в качестве аргумента за или против ... сам я POST-ирую из SPA на Vue.js по всем случаям ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 14:51 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
carrotik.. на другом форуме мне сказали, что POST для получения данных (не для создания сущности на сервере) мешает использовать кнопку "назад" в браузере я имел в виду про API. с точки зрения браузера всё несколько иначе, да и семантика другая. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 14:52 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
carrotik.. на другом форуме мне сказали, что POST для получения данных (не для создания сущности на сервере) мешает использовать кнопку "назад" в браузере (ну, то есть, не сохраняется история браузера) ... это просто комментарий, не в качестве аргумента за или против ... сам я POST-ирую из SPA на Vue.js по всем случаям ...в данном случае ни GET ни POST не повлияют на историю браузера - тут же нет перехода на другую страницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 14:55 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
hVosttТо, что GET должен быть идемпотентным -- да, однозначно POST может использоваться как GET в случаях, когда запрос представляет собой сложный объект, и чисто технически GET использовать невозможно. Кошерность тут не при чём, дас ист реальность ) Не, ну, конечно, в иной ситуации не то что некошерное съешь, но и свинины ломоть заточишь. Но, делая поиск через пост мы, например, теряем возможность "вперед-назад", или возможность сохранить результаты поиска в закладках и т.п. Ну и плюс POST с отображением его результата это сам по себе трефной подход, т.к. кошером считается паттерн "Post/Redirect/Get" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 16:43 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatНе, ну, конечно, в иной ситуации не то что некошерное съешь, но и свинины ломоть заточишь. Но, делая поиск через пост мы, например, теряем возможность "вперед-назад", или возможность сохранить результаты поиска в закладках и т.п. Ну и плюс POST с отображением его результата это сам по себе трефной подход, т.к. кошером считается паттерн "Post/Redirect/Get" вперёд-назад не теряем, если это SPA :) но вот прям упарываться и пытаться сделать GET не нужно, как этого хочет ТС P/R/G конечно известный паттерн, но он немного про другое, его задача решать проблему повторной отправки формы, в том числе по F5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 16:45 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Агнец за бортомЧто за ерунда? Ты мешаешь бизнес-логику (поиск) с транспортной (GET/POST). Нихера не понял. Не изволите ли изъясниться яснее? Агнец за бортом" то можно делать в два прохода:" - когда коту делать нечего... Post/Redirect/Get. Ссылку уже давал. Тоже придумали когда делать нечего? Агнец за бортомПротоколы посерьезней пацанов со скуля кладут на это. Это SOAP, что ли? "Творение Комитета" , которое все уже забыли аки ночной кошмар ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 17:06 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
hVosttвперёд-назад не теряем, если это SPA :) Ну, где SPA, там и REST, а с т.з. REST поиск через POST это уже вообще по ту сторону зла :) hVosttP/R/G конечно известный паттерн, но он немного про другое, его задача решать проблему повторной отправки формы, в том числе по F5 При поиске с этим тоже будет проблема. По Ф5 страшного ничего не случится, но будет анноящее предупреждение о повторной отправке. "Убивать тебя не станут, но тоже ничего хорошего" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 17:22 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthathVosttвперёд-назад не теряем, если это SPA :) Ну, где SPA, там и REST, а с т.з. REST поиск через POST это уже вообще по ту сторону зла :) нет там никакого зла. в пост можно отправить нормальный объект запроса, с фильтрами, группировками, сортировками и другими параметрами. чистота GET это про уникальный адрес ресурса и обращение к ресурсу. параметры запроса в query string уже пинают этой концепции по яйцам. так что пофигу что у вас там будет для получения данных: GET или POST. абсолютно монопенисуально :) fkthatПри поиске с этим тоже будет проблема. По Ф5 страшного ничего не случится, но будет анноящее предупреждение о повторной отправке. "Убивать тебя не станут, но тоже ничего хорошего" (с) веб не идеален ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 18:09 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
hVosttчистота GET это про уникальный адрес ресурса и обращение к ресурсу. параметры запроса в query string уже пинают этой концепции по яйцам. Почему же. Очень даже по REST. Есть ресурс (path часть URL, то что до "?"). У ресурса может быть множество разных представлений. А query string - это как раз опции представления этого одного и того же ресурса. Разжую пример с поиском. Запрос на поиск мы трактуем как ресурс. Есть коллекция этих ресурсов с URL, допустим, "/api/search", отдельный ресурс запроса поиска будет иметь URL "/api/search/{id}". Ресурс поиска имеет два представления (representation) - параметры поиска, например в JSON и список с результатами поиска. Теперь клиент отправляет POST на /api/search передавая параметры поиска (первое представление), а POST по URL коллекции это как раз создание ресурса. Сервер сохраняет этот ресурс (запрос) в каком-нибудь storage, клиенту возвращается ID созданного ресурса. Допустим "4269". Теперь клиент делает запрос GET по URL этого ресурса /api/search/4269 и в ответ получает второе представление этого ресурса (список с результатами поиска). Все как раз предельно по REST. hVosttвеб не идеален ) Да мир вообще не идеален. Порой по необходимости такого наговнокодишь, что в страшном сне не привидится. Но в данном случае речь ведь не идет о выборе "сделать трефно, но зато за один день или делать кошерно, но целый год". Я сам такую шляпу однажды делал, и если уже есть вся логика самого поиска, то дел тут от силы на пару-тройку человекочасов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 19:01 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatvb_subfkthat, так можно и в один проход сразу из POST-запроса вернуть всё. Это некошерно. Возврат результатов поиска должен быть через GET. Это такой бест практис - запрос чего-то не изменяющий состояние сервера должен быть GET, а изменения на сервере это POST/PUT/DELETE. GraphQL ещё не видели? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 04:50 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Дмитрий МухGraphQL ещё не видели? :) Не. Еще не интересовался. Это что-то типа RIPнутого OData? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 08:08 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
Дмитрий Мух, Взглянул мельком - показалось, что какая-то шляпа. Чо уж тогда до конца не идти, и не разрешить передачу sql запроса прямо в http. Кстати, в MS SQL такая тема была еще лет 10 назад, потом потом, видать таки поняли, что за херь на самом деле придумали, и фичу эту нах выпилили. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 08:27 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatПочему же. Очень даже по REST. Есть ресурс (path часть URL, то что до "?"). У ресурса может быть множество разных представлений. А query string - это как раз опции представления этого одного и того же ресурса. У query string есть ряд ограничений. На длину строки в первую очередь, во вторую на передачу структуры, а не плоский набор параметров -- придётся извращаться. В третью, ограниченный набор символов, придётся эскейпить, что сильно влияет на длину строки. В итоге, я не понимаю, чего ради еб****ь, чтобы влезть в ограничения, если можно использовать POST и передавать нормальные структуры данных с поддержкой UTF-8. fkthatРазжую пример с поиском. Запрос на поиск мы трактуем как ресурс. Есть коллекция этих ресурсов с URL, допустим, "/api/search", отдельный ресурс запроса поиска будет иметь URL "/api/search/{id}". Ресурс поиска имеет два представления (representation) - параметры поиска, например в JSON и список с результатами поиска. Теперь клиент отправляет POST на /api/search передавая параметры поиска (первое представление), а POST по URL коллекции это как раз создание ресурса. Сервер сохраняет этот ресурс (запрос) в каком-нибудь storage, клиенту возвращается ID созданного ресурса. Допустим "4269". Теперь клиент делает запрос GET по URL этого ресурса /api/search/4269 и в ответ получает второе представление этого ресурса (список с результатами поиска). Все как раз предельно по REST. REST не накладывает ограничения на использование POST для read-only получения данных. Видимо вы никогда не имели никаких дел со сложной клиентской фильтрацией, поэтому у вас рассуждения ограничиваются исключительно придуманной себе REST-религией и собственным опытом. Как заметил Дмитрий выше, хороший пример GraphQL, в котором запрос к данным это сложный объект, который передаётся в JSON. fkthatДа мир вообще не идеален. Порой по необходимости такого наговнокодишь, что в страшном сне не привидится. Но в данном случае речь ведь не идет о выборе "сделать трефно, но зато за один день или делать кошерно, но целый год". Я сам такую шляпу однажды делал, и если уже есть вся логика самого поиска, то дел тут от силы на пару-тройку человекочасов. Никаких минусов в использовании POST для запроса данных нет. Кроме упорото религиозных конечно. И никто не говорил, что семантика это плохо. Нет, но нужно смотреть на мир не через розовые очки, и понимать, что нужно решать задачи, а не обтёсывать кирпичики до идеально ровных граней. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:28 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatДмитрий МухGraphQL ещё не видели? :) Не. Еще не интересовался. Это что-то типа RIPнутого OData?нет ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:45 |
|
Передача объекта параметров в Get-запросе
|
|||
---|---|---|---|
#18+
fkthatВзглянул мельком - показалось, что какая-то шляпа. Чо уж тогда до конца не идти, и не разрешить передачу sql запроса прямо в http. Кстати, в MS SQL такая тема была еще лет 10 назад, потом потом, видать таки поняли, что за херь на самом деле придумали, и фичу эту нах выпилили. Ну и зачем выдумывать всякую ересь? Ничего никто не выпиливал, откуда такие больные фантазии берутся-то? https://www.nuget.org/packages/Microsoft.AspNetCore.OData ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:47 |
|
|
start [/forum/topic.php?fid=18&msg=39871683&tid=1354894]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 257ms |
total: | 400ms |
0 / 0 |