swagger-ui повертає 500 після розгортання


79

Звичайна конфігурація чудово працює на моїй машині, взагалі ніяких проблем.

Але коли я розгортаюся в нашому тестовому середовищі - я отримую таке повідомлення

500: {"Повідомлення": "Сталася помилка." } / api / swagger / docs / v1

введіть тут опис зображення Розгортання до default web site/api

Я здогадуюсь, що це пов’язано з baseUrl чи чимось подібним, але я навіть не уявляю, з чого почати.

Мої маршрути працюють нормально в рамках проекту - я можу зателефонувати до всіх своїх кінцевих точок webapi, і вони відповідають правильно.

будь-яка допомога буде дуже вдячна

Відповіді:


167

Під час налагодження я використовував конфігурацію налагодження (яку я створив XmlComments для: Властивості -> вкладка збірки -> Вивід -> Файл документації XML)

Я не робив цього для своєї конфігурації випуску (duh ...) - тепер все працює


У мене була та сама проблема. Моє розгортання є блакитним, і у мене проблема все ще є. stackoverflow.com/questions/39406820 / ...
user2128702

1
Моє розгортання було блакитним, але я забув просту річ. Змініть властивості проекту, щоб також створити файл XML для режиму випуску!
Карл Герцен,

Яким повинен бути каталог?
Zapnologica

@Zapnologica, це залежить від того, де, скажете ви swagger config, знаходяться файли.
VisualBean

Це спрацювало для мене, але зараз така сама помилка з’являється у ВСІХ органах реагування всіх методів. "Повідомлення": "Сталася помилка." Куди мені зараз дивитись? Дякую
Йоханнес Венту

22

дякую @VisualBean.

Оскільки для мене це було не так очевидно .... як ... простий образ.

У меню Проект> Властивості проекту> Вкладка «Збірка»

введіть тут опис зображення


10

Swashbuckle приховує справжнє повідомлення про помилку через налаштування customErrors у web.config. Якщо ви вимкнете customErrors, ви отримаєте краще повідомлення про помилку.

<system.web>
    <customErrors mode="Off"/>
</system.web>

Якщо перша відповідь не працює для вас. Скористайтеся цією пропозицією (увімкніть режим користувацьких помилок), щоб побачити, що відбувається у вашій програмі. Для мене я зрозумів, що хтось ввів неоднозначну кінцеву точку в одному з наших контролерів API. У той момент, коли я це виправив, у нас все було добре.
Seun S. Lawal

3

Як зазначено у прийнятій відповіді, ви повинні переконатися, що вихідний файл документації XML знаходиться у bin, а не bin \ Debug або bin \ Release (перевірте це для всіх конфігурацій збірки).

Я все-таки отримав відповідь 500, оскільки використовую кілька файлів документації XML. У своїй реалізації SwaggerConfig я включаю файли документації XML з двох проектів (сам проект WebApi та бібліотека класів, на яку посилається проект WebApi):

c.IncludeXmlComments(string.Format(@"{0}\bin\MyWebApiProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
c.IncludeXmlComments(string.Format(@"{0}\bin\ReferencedProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));

Файл документації XML проекту WebApi був правильно опублікований у папці bin веб-сайту, однак файл документації XML проекту, на який посилався, не був (хоча він з'являється в папці bin скомпільованого проекту).

Тому вам потрібно змінити файл проекту WebApi (.csproj) у текстовому редакторі та додати наступні розділи внизу (замінити ReferencedProject ):

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
  <CopyAllFilesToSingleFolderForMsdeployDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
  </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\ReferencedProject\bin\ReferencedProject.xml" />
    <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

Див. Як включити додаткові файли за допомогою веб-пакетів розгортання VS2010? для повного пояснення.


Як варіант цього, я додав власну розмітку до файлу pubxml, а не csproj, як описано в посиланні нижче. Також використовується, Include=bin\*.xmlякий включав xml з усіх проектів, на які посилаються, без необхідності їх явного вказівки. Див. Docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/…
Джо,

0

Проблема в тому, що запуск dotnet publishз -r Releaseне створює XML-файл. Однак, dotnet publishс-r Debug дійсно фактично виробляє файл. Це пояснює, чому люди отримують цю проблему лише тоді, коли вони розгортаються в середовищах, ІНШІХ, ніж локально, а потім починають бити себе, коли пошук винятку відбувається лише на prod. (ITS THE RELEASE) Для повторного введення просто запустіть ці команди локально та перегляньте вихідні дані каталог, і ви повинні побачити проблему.

(ОНОВЛЕННЯ) Виправлення для мене полягало в тому, щоб фактично зайти у файл .csproj та додати рядок, щоб переконатися, що файл завжди копіювався. Різниця, показана нижче введіть тут опис зображення


1
Якщо ви подивитесь на прийняту відповідь, ви, мабуть, зрозумієте, чому саме. :)
VisualBean

@VisualBean, якщо ви припускаєте, що рішення полягає у зміні файлу csproj після зміни за допомогою вікна властивостей для оновлення виводу> XML, я не вірю, що рішення є рішенням для мене, і у мене була та сама проблема. Замість цього, як моя конфігурація налагодження, так і випуск абсолютно однакові, і вони не мають жодного значення, зазначеного у файлі документації XML, але тим не менше, збірка налагодження створить цей файл для налагодження, а не для випуску.
jbooker

1
Прийнятою відповіддю є увімкнення XML-коментарів у налаштуваннях випуску, а також налаштуваннях налагодження.
Karl Gjertsen,

@KarlGjertsen, "вмикаючи XML", що саме ти маєш на увазі? Ви маєте на увазі насправді розмістити значення у "Шляху документації XML"? Оскільки це не було виправленням для мене, і я просто хочу знати, чи є у вас конкретні докази того, що це виправлення, вірші просто говорять "виправлення - це XYZ". Для мене виправлення полягало в тому, щоб просто ДОДАТИ документ до контролю джерела, того, який виводиться, замість того, щоб залежати від msbuild, щоб це зробити для rme
jbooker

Я маю на увазі встановлення прапорця в налаштуваннях проекту, щоб файл коментарів XML автоматично створювався. Я встановив це для збірки Dubuffet, але не для збірки випуску.
Karl Gjertsen

0

Прийнята відповідь має бути першим, що ви спробуєте.

Однак у мене встановлено вихід XML для переходу до App_Data \, а мій Swashbuckle налаштований на читання з цього каталогу, тому не має значення, яким чином він будується: файли xml будуть "там". Тим не менше, я все ще отримував помилку ...

Я знайшов на форумах MSDN @ відповідь досить2012:

виберіть "Видалити додаткові файли за призначенням" у "Параметри публікації файлів" на панелі "Налаштування" діалогового вікна "Опублікувати".

Працював як оберіг!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.