Подтвердить что ты не робот

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

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

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

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

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

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

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

любая помощь будет высоко оценена

4b9b3361

Ответ 1

При отладке я использовал конфигурацию отладки (для которой я создал XmlComments для: Properties → build tab → Output → XML Documentation File)

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

Ответ 2

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

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

Ответ 3

спасибо @VisualBean.

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

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

enter image description here

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

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