swagger-ui возвращает 500 после развертывания

Конфигурация из коробки отлично работает на моей машине, никаких проблем.

Но когда я развертываюсь в нашей тестовой среде, я получаю следующее сообщение

500: {"Сообщение": "Произошла ошибка". } / api / swagger / docs / v1

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

Я предполагаю, что это как-то связано с baseUrl или чем-то в этом роде, но я даже не знаю, с чего начать.

Мои маршруты отлично работают в рамках проекта - я могу вызывать все свои конечные точки webapi, и они правильно реагируют.

Любая помощь приветствуется


person VisualBean    schedule 25.11.2015    source источник


Ответы (6)


При отладке я использовал конфигурацию отладки (которую я сгенерировал для XmlComments: Свойства -> вкладка сборки -> Вывод -> XML-файл документации)

Я не делал этого для своей конфигурации выпуска (да ...) - теперь все работает

person VisualBean    schedule 25.11.2015
comment
У меня такая же проблема. Мое развертывание выполняется на лазурном сервере, и проблема все еще не решена. stackoverflow.com/questions/39406820/ - person user2128702; 09.09.2016
comment
Мое развертывание было на лазурном, но я забыл о простой вещи. Измените свойства проекта, чтобы также создать XML-файл для режима выпуска! - person Karl Gjertsen; 30.06.2017
comment
Какой должен быть каталог? - person Zapnologica; 10.10.2017
comment
@Zapnologica, это зависит от того, где вы указываете конфигурацию swagger, где находятся файлы. - person VisualBean; 09.01.2018
comment
У меня это сработало, но теперь одна и та же ошибка появляется во ВСЕХ телах ответа всех методов. Сообщение: произошла ошибка. Куда мне теперь смотреть? Спасибо - person Johannes Wentu; 20.02.2020

спасибо @VisualBean.

Как это было не так очевидно для меня .... как ... простой образ.

В Project> Свойства вашего проекта> Вкладка "Сборка"

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

person stefmex    schedule 22.08.2019
comment
О чувак! это огромная помощь :) - person Kayvan Salimi; 07.02.2021

Swashbuckle скрывает настоящее сообщение об ошибке из-за настройки customErrors в web.config. Если вы отключите customErrors, вы должны получить более четкое сообщение об ошибке.

<system.web>
    <customErrors mode="Off"/>
</system.web>
person fodonnel    schedule 30.08.2016
comment
Если первый ответ вам не подходит. Используйте это предложение (включите пользовательский режим ошибок), чтобы узнать, что происходит в вашей программе. Что касается меня, я понял, что кто-то представил неоднозначную конечную точку в одном из наших контроллеров API. В тот момент, когда я исправил это, все было в порядке. - person Seun S. Lawal; 22.09.2019
comment
Это лучший первый шаг, чем гадать, в чем заключается ошибка! - person LarryBud; 21.04.2021

Как указано в принятом ответе, вы должны убедиться, что выходной файл 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 Web пакеты развертывания? для получения полного объяснения.

person Sven Vranckx    schedule 12.11.2017
comment
В качестве варианта я добавил настраиваемую разметку в файл pubxml, а не csproj, как описано в приведенной ниже ссылке. Также использовался Include=bin\*.xml, который включал xml из всех проектов, на которые есть ссылки, без необходимости их явно указывать. См. docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/ - person Joe; 16.01.2018

Проблема в том, что запуск dotnet publish с -r Release не создает XML-файл. Однако dotnet publish с -r Debug действительно создает файл. Это объясняет, почему люди сталкиваются с этой проблемой только при развертывании в среде ДРУГОЙ, а не локально, а затем отбрасывают себя, когда обнаружение исключения возникает только на продукте. (ЕГО РЕЛИЗ) Чтобы воспроизвести, просто запустите эту команду локально и просмотрите вывод каталог, и вы должны увидеть проблему.

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

person jbooker    schedule 23.06.2017
comment
Если вы посмотрите на принятый ответ, вы, вероятно, поймете, почему это так. :) - person VisualBean; 25.06.2017
comment
@VisualBean, если вы предполагаете, что решение состоит в том, чтобы изменить файл csproj после изменения с помощью окна свойств для обновления вывода ›XML, я не верю, что это решение является решением для меня, и у меня была такая же проблема. Вместо этого, как моя конфигурация отладки, так и конфигурация выпуска абсолютно одинаковы, и в XML-файле документации ничего не указано, но, тем не менее, отладочная сборка сгенерирует этот файл для отладки, а не для выпуска. - person jbooker; 25.06.2017
comment
Принятый ответ - включить комментарии XML в настройках выпуска, а также в настройках отладки. - person Karl Gjertsen; 30.06.2017
comment
@KarlGjertsen, что вы имеете в виду, включив XML? Вы имеете в виду, что действительно помещаете значение в Путь к документации XML? Потому что это не было исправлением для меня, и я просто хочу знать, есть ли у вас конкретные доказательства того, что это исправление, стихи просто говорят, что исправление - XYZ. Исправление для меня заключалось в том, чтобы просто ДОБАВИТЬ документ в систему управления версиями, тот, который создается, вместо того, чтобы зависеть от msbuild, чтобы сделать это для - person jbooker; 01.07.2017
comment
Я имею в виду установку флажка в настройках проекта, чтобы файл комментариев XML создавался автоматически. Я установил это для сборки Dubuffet, но не для сборки выпуска. - person Karl Gjertsen; 01.07.2017
comment
Установка этого флажка никогда не работала для меня. Мне пришлось обновить вручную, используя метод, который я описал выше. Возможно, есть две отдельные проблемы, но это была моя, и пахла как проблема, представленная выше. - person jbooker; 17.07.2017

Принятый ответ должен быть первым, что вы попробуете.

Однако мой вывод XML настроен для перехода в App_Data \, а мой Swashbuckle настроен для чтения из этого каталога, поэтому не имеет значения, каким образом он создается: файлы xml будут «там». Тем не менее, я все еще получал ошибку ...

Я нашел на форумы MSDN @ ответ достаточно2012:

выберите «Удалить дополнительные файлы в месте назначения» в «Параметры публикации файла» на панели «Настройки» диалогового окна «Публикация».

Работал как шарм!

person bkwdesign    schedule 04.08.2017