Swagger не находит XML и DataAnnotations из других проектов - PullRequest
1 голос
/ 20 февраля 2020

Я конвертирую SOAP API в REST в устаревшем веб-приложении.

Я начал с проекта webapi (C#) - настроил его с помощью swagger и swashbuckle. Я добавил к этому конечные точки с комментариями XML. При этом используется полная структура, а не. NET Core.

Все комментарии выглядят так, как и ожидалось в swagger-ui (XML генерация документов работает нормально, файл забирается swagger через config).

Этот проект ссылается на старые SOAP API-классы (написанные на VB. NET). Я пытался пометить эти классы с помощью RequiredAttribute (например) и добавить к ним XML комментариев, но они не отображаются вообще в swagger-ui. Они настроены в очень мелкой иерархии классов (базовый класс, от которого все они наследуются - я включил эту информацию для полноты).

В этих других VB. NET проектах действительно включена документация XML, и я см. XML файлы с документацией, которую я добавил в папку bin проекта webapi, как и ожидалось. Я добавил их в конфигурацию swagger и считаю, что они загружены правильно (поскольку при загрузке страницы не возникает исключений).

Однако - ни одна из моделей в swagger-ui не отображает DataAnnotation атрибуты, которые я добавил, или любую из XML документации в этих проектах VB. NET.

Я бы хотел, чтобы они отображались, а также были перечислены в разделе Modles swagger -ui (который сейчас не существует).

Что мне не хватает?


Обновление:

Я провел некоторое тестирование с внешним библиотека (C#, полный каркас), с использованием тестовой модели.

Это только что сработало, как и ожидалось - XML документация и DataAnnotation атрибуты обнаруживаются и отображаются на swagger-ui без проблем.

Сейчас я подозреваю VB. NET, хотя, возможно, это проблема с проектами VB. NET, являющимися проектами WCF.


Обновление:

Сделано то же самое с новым VB. NET библиотека классов и все просто работает ™, так что ... возможно, иерархия классов или что-то с этими другими VB проекты (вероятно, не простые библиотеки классов или что-то еще мешает).


Обновление:

Это не наследование наследования.

1 Ответ

1 голос
/ 20 февраля 2020

Оказывается, все классы VB. NET помечены старым добрым SerializableAttribute.

Это приводит к тому, что модели выглядят совершенно по-разному в swagger-ui и, следовательно, ни одна из аннотаций (DataAnnotation атрибуты и XML комментарии) для правильной работы.

Это также приводит к тому, что у всех свойств появляется подчеркивание перед их именами (о чем мне также было любопытно, и я забыл упомянуть в моем вопрос).


Чтобы решить мою реальную проблему, я нашел решение по этой проблеме GitHub .

А именно, гарантируя правильное форматирование JSON для использоваться (в Global.asax.cs):

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...