Как с помощью Swashbuckle.AspNetCore предоставить форму для параметров FromBody?

В моем WebAPI есть метод смены пароля. Он принимает параметр, который является классом, содержащим два свойства: «OldPassword» и «NewPassword». Очевидно, я не хочу передавать эти строки запроса, я хочу, чтобы они были переданы в тело. Как только я использую атрибут FromBody, пользовательский интерфейс Swagger больше не предлагает красивую форму с двумя текстовыми полями, он превращается в один BLOB-объект JSON.

Я хотел бы смешать это поведение, предоставить форму, но отформатировать ввод в json, который соответствовал бы схеме.

Я попытался поиграть с OperationFilters, но ничего подобного не добился. Я уверен, что это довольно распространенное явление, но мой поиск в Google и stackoverflow ничего не дал. Возможно, я не ищу подходящие ключевые слова. Не уверен.


person Carl Quirion    schedule 15.10.2018    source источник
comment
Это помогает? - Попытка доступа к API с помощью Content-Type application / x-www-form-urlencoded   -  person Helen    schedule 15.10.2018
comment
Не совсем. FromForm действительно дает мне хорошие поля ввода в swagger-ui, но затем он создает запросы, которые не будут десериализоваться должным образом. Я заметил, что он создает и разделяет пары ключ-значение вместо json. Пытался добавить Consumes (application / json) без особого успеха ... попробовал с urlencoded и formdata.   -  person Carl Quirion    schedule 15.10.2018
comment
Итак, если я правильно понимаю, вы хотите получить опыт пользовательского интерфейса Url, но на самом деле публиковать в Body, верно? ... и нет, это не очень распространено   -  person Helder Sepulveda    schedule 15.10.2018
comment
@HelderSepulveda Да, именно так. Я бы не отказался предоставить свой код для форматирования пар ключ-значение в правильно сформированный json, который будет десериализоваться в типе моего параметра. Поскольку это пароль для изменения, я могу использовать аннотации к данным, чтобы указать его пароль и получить красивые маленькие поля ввода со скрытыми паролями. Это элегантный способ ввода. Но я не хочу, чтобы пароль в открытом виде передавался в строках запроса, поскольку их можно регистрировать по пути.   -  person Carl Quirion    schedule 15.10.2018
comment
Как насчет FromHeader, это сработает для вас?   -  person Helder Sepulveda    schedule 15.10.2018
comment
Вы используете Swagger UI 2.x или 3.x.? См. определение версии. 2.x имеет редактор форм JSON, его можно включить с помощью параметра конфигурации. 3.x в настоящее время не имеет редактора форм JSON.   -  person Helen    schedule 15.10.2018
comment
@HelderSepulveda Спасибо за совет, попробовал. Это не работает с моим классом напрямую, но копирование моих свойств прямо в методе помогло. Так что для меня этого достаточно. :) Спасибо!   -  person Carl Quirion    schedule 15.10.2018
comment
@ Хелен, я этого не знала, но да, я использую версию 3.19. Думаю, я просто буду использовать заголовки   -  person Carl Quirion    schedule 15.10.2018
comment
Рад, что смог помочь, но точно так же, как @Helen указывает, что один-единственный объект JSON - это еще не конец света, и можно добавить редактор, чтобы облегчить рисование. он просто еще не доступен в последней версии пользовательского интерфейса ... Swagger-UI не должен быть тем, что ваши конечные пользователи используют для использования вашего API. Почему это было такой проблемой для вас?   -  person Helder Sepulveda    schedule 15.10.2018
comment
@HelderSepulveda Это справедливый вопрос. Услуги, предлагаемые через этот API, действительно будут использоваться другими способами, поэтому в этом случае чванство полезно только для тестов и документации. НО для некоторых функций администратора (таких как смена паролей) Swagger - это фактический пользовательский интерфейс, который будет использоваться специалистами службы поддержки. Но все же ... я думаю, что вы правы, я не должен проектировать с учетом особенностей / ограничений чванства. В этом смысле я думаю, что я вернусь и буду придерживаться JSON blobs.   -  person Carl Quirion    schedule 15.10.2018


Ответы (1)


Решил придерживаться json blob в теле, так как это решение имеет наибольший смысл с точки зрения дизайна.

У меня он работает с FromHeader, но, учитывая, что этот API следует использовать не так, мы предпочли придерживаться дизайна для фактического варианта использования, а не вокруг функций и ограничений Swagger.

Спасибо за ответы!

person Carl Quirion    schedule 15.10.2018
comment
100% с вами в этом! НЕ разрабатывайте с учетом особенностей / ограничений чванства, если ваша служба поддержки хочет использовать это, изучение JSON не будет концом света, вы также можете предоставить примеры заполнения пробелов, чтобы упростить заполнение необходимой схемы - person Helder Sepulveda; 15.10.2018
comment
А если вам нужна функция пользовательского интерфейса, просто запросите ее: github.com/swagger-api / swagger-ui / issues всегда проверяйте, есть ли уже запрос, и оставляйте комментарий - person Helder Sepulveda; 15.10.2018
comment
Вот запрос функции для добавления редактора форм JSON в 3.x: github.com / swagger-api / swagger-ui / issues / 2771 - person Helen; 15.10.2018