|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
||||||
Swagger requred nullable15.07.2025, 14:13. Показов 1281. Ответов 9
Метки нет (Все метки)
Всем доброго времени суток!
Вопрос такой, берём какое-либо ссылочное свойство делаем его нулабельным (в проекте где ссылочные типы по умолчанию не null) и помечаем required, вот так:
Что я только не пробовал, атрибуты на свойства вешал всякие (MaybeNull, AllowNull, SwaggerSchema(Nullable = true), JsonProperty(Required = Required.AllowNull)), потом стал пробовать через ISchemaFilter добраться и руками выставить. Но через фильтр не получается получить информацию о том, помечен ли тип нулабельным или нет, для типов значений есть возможность, а для ссылочных - ничего не нашёл. Получилось только через имя типа выставить нулабельность, то есть я могу обозначить ВСЕ типы MyClass как нулабельные, но это не совсем то что мне нужно. В общем, может кто-нибудь что-нибудь посоветовать в данном случае?
0
|
||||||
| 15.07.2025, 14:13 | |
|
Ответы с готовыми решениями:
9
Nullable и Actions параметры. Что настроено у вас? Asp core swagger контроль отображения
|
|
605 / 387 / 198
Регистрация: 31.03.2013
Сообщений: 2,687
|
|
| 15.07.2025, 22:26 | |
|
Члены, обязательные для инициализации помечаются новым ключевым словом required, что дает возможность компилятору проверять, факт инициализации.
А зачем вы его помечаете так, если у вас он может быть null? Уберите этот required
1
|
|
|
|
||||||||||||
| 16.07.2025, 06:18 | ||||||||||||
Predatore, можно чуть подробностей, чтобы можно было потыкать: - какой тип проекта? (asp.net core, или что там ещё) - версия .net - какая реализация Swagger используется?
0
|
||||||||||||
|
605 / 387 / 198
Регистрация: 31.03.2013
Сообщений: 2,687
|
||
| 16.07.2025, 09:17 | ||
|
0
|
||
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|||
| 16.07.2025, 10:51 [ТС] | |||
|
Wolfdp, всё верно описал. Добавлено через 2 минуты .net 8, но на .net 9 тоже пробовал. Про Swagger я вроде написал, что Swashbuckle. Последняя версия, хотя пробовал разные, мало ли... NSwag не пробовал. upd. Попробовал ещё и .net 10 до кучи, хотя версия фреймворка вряд ли может влиять. Проблема скорее в самом генераторе. Ещё в начале не упомянул, что вот такую шутку SupportNonNullableReferenceTypes в настройках генератора нашёл. Но она вообще как-то мало помогает. Из того что заметил, без неё string всегда nullable, вне зависимости от того нулабельный он на самом деле или нет, а с настройкой, начинает их различать. Но обычные ссылочные типы, за редкими специфическими исключениями, всё равно всегда помечены как не нулабельные, вне зависимости от настройки и от того нулабельны они на самом деле или нет.
1
|
|||
|
|
|
| 16.07.2025, 11:51 | |
|
Predatore, вечером постараюсь потыкать, самому интересно.
Пока у меня подозрение что данный финт ушами на C# не шибко укладывается в парадигму Swagger. В общем контракте нет возможности указать "поле может быть null, но пожалуйста обязательно его проставляй". Скорее всего Swashbuckle воспринимает ключевое слово required как "обязательное не пустое" и нужно как-то убедить его в обратном. Т.е. по итогу в контракте будет обычное nulleble поле, и автокод на основе него создаст обычное свойство без required. По идеи не смертельно.
0
|
|
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
||
| 16.07.2025, 19:00 [ТС] | ||
|
Мне тоже кажется, что Swagger не очень понимает что от него хотят, особенно учитывая что 100% нулабельные ссылочные типы он всё равно не хочет помечать как nullable. При этом он "позволяет" не указывать их, если они не обязательны, что можно интерпретировать как допускающие null, но на самом деле в схеме он не помечает их как nullable. И при всём при этом, у него есть возможность проставить nullable любому типу. Как я уже писал, через ISchemaFilter у меня получается выставить nullable любому типу по его имени, то есть я могу там сказать что вот всем типам MyClass ставь nullable и это работает. Так же там могу по рулить типами Nullable<T>, то есть всякими int?, DateTime? и прочими не ссылочными типами. А вот со ссылочными беда, ни в Схеме ни в Контексте я не нахожу информации о том объявлен ли ссылочный тип нулабельным или нет. Подозреваю что именно из-за отсутствия этой информации и сам Swagger так чудит, ведь Nullable<T> он может корректно отображать, видимо потому что в Контексте они объявлены именно как Nullable<T>, то есть чётко видно что тип допускает null. К сожалению, подозреваю, что нужно ждать пока в ISchemaFilter начнут прокидывать ифнормацию и о том объявлен ли ссылочный тип как nullable, но тогда скорее всего всё само заработает как нужно ) Типы DateOnly и TimeOnly в Swagger тоже не сразу заработали как нужно. Ну или нужно влезть куда-то ещё перед ISchemaFilter и передать самому туда признак нулабельности для ссылочного типа, но мне кажется это нужно залезать куда-то в потроха Swashbuckle, к этому я пока не готов )
0
|
||
|
|
|||||||||||
| 20.07.2025, 00:14 | |||||||||||
|
Заставил себя таки сесть потыкать...
1. required судя по всему реально воспринимает как аналог атрибуту. Можно смело заводить баг-репорт разрабам либы, но что-то мне подсказывает что они будут не согласны с тем что это вообще проблема. Наверное лучше всего не практиковать ключевое слово required вообще для моделей что будут участвовать в OpenAPI 2. в json контракте отдаваемым свагером есть массив required где вписываются эти поля. Технически через фильтр можно отсеивать все nulleble элементы, как-то так
3. По умолчанию свагер почему-то всем типам лепит "обязательное", так что пришлось несколько подкрутить опции
ниже прикрепил пример, на котором смотрел
1
|
|||||||||||
|
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
|
|
| 22.07.2025, 02:25 [ТС] | |
|
Wolfdp, Спасибо!
Попробую тоже покрутить. Required.Remove это конечно не то что нужно, тут гораздо интереснее покрутить метод IsNullableReferenceType, что то подобное я пробовал, оно нифига не работало, но здесь метод немного отличается от того что я делал и если он рабочий, пусть и написан нейронкой, то это именно то что мне нужно, основная проблема с которой я столкнулся как раз и была в том, что я не мог выявить, является ли ссылочный тип нулабельным? Проверю работоспособность метода и отпишу.
0
|
|
|
|
||
| 22.07.2025, 05:44 | ||
|
0
|
||
| 22.07.2025, 05:44 | |
|
Помогаю со студенческими работами здесь
10
Подключение bearer token в swagger Проблема с Url swagger Как из Swagger убрать автозаполнение данных? Swagger перестал передавать данные на вход контроллера Как работает Swagger? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|