read not from found failed error c# asp.net-web-api swagger-ui swashbuckle

c# - not - swagger fetch error internal server error swagger v1 swagger json



swagger-ui devuelve 500 después del despliegue (5)

La configuración lista para usar funciona perfectamente en mi máquina, sin ningún problema.

Pero cuando lo implemento en nuestro entorno de prueba, recibo el siguiente mensaje

500: {"Mensaje": "Ha ocurrido un error". } / api / swagger / docs / v1

El despliegue es default web site/api

Supongo que tiene algo que ver con la baseUrl o algo así, pero no tengo ni idea de dónde comenzar.

Mis rutas funcionan bien dentro del proyecto: puedo llamar a todos mis puntos finales webapi y responden correctamente.

cualquier ayuda sería muy apreciada


Al depurar estaba usando la configuración de depuración (que había generado XmlComments para: Propiedades -> pestaña de compilación -> Salida -> Archivo de documentación XML)

No había hecho esto para mi configuración de lanzamiento (duh ...), ahora todo funciona


Como se indica en la respuesta aceptada, debe asegurarse de que la salida del archivo de documentación XML esté en bin y no bin / Debug o bin / Release (verifique esto para todas las configuraciones de compilación).

Todavía recibí la respuesta 500 porque uso múltiples archivos de documentación XML. En mi implementación SwaggerConfig incluyo archivos de documentación XML de dos proyectos (el proyecto WebApi en sí y una biblioteca de clases a la que hace referencia el proyecto 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));

El archivo de documentación XML del proyecto WebApi se publicó correctamente en la carpeta bin del sitio, sin embargo, el archivo de documentación XML del proyecto al que se hace referencia no (aunque aparece en la carpeta bin del proyecto compilado ).

Por lo tanto, debe modificar el archivo de proyecto de WebApi (.csproj) en un editor de texto y agregar las siguientes secciones en la parte inferior (reemplace el Proyecto de referencia ):

<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>

Consulte ¿Cómo incluye archivos adicionales con los paquetes de implementación web VS2010? para una explicación completa


El problema es que ejecutar dotnet publish con -r Release no produce un archivo XML. Sin embargo, dotnet publish con -r Debug de hecho produce el archivo. Esto explica por qué las personas solo tienen este problema cuando se implementan en entornos que NO son locales, y luego se patean cuando la excepción de encontrar solo ocurre en el producto. (SU LIBERACIÓN) Para reprogramar, simplemente ejecute esos comandos localmente y vea la salida directorio y debería ver el problema.

(ACTUALIZACIÓN) La solución para mí fue ir al archivo .csproj y agregar una línea para asegurar que el archivo se copiara siempre. La diferencia se muestra a continuación


La respuesta aceptada debe ser lo primero que intente.

Sin embargo, tengo mi salida XML configurada para ir a App_Data / y tengo mi Swashbuckle configurado para leer desde ese directorio, por lo tanto, no importa de qué manera se construya: los archivos xml van a estar ''allí''. Sin embargo, seguía recibiendo el error ...

Encontré en los foros de MSDN @ respuesta suficiente 2012:

seleccione "Eliminar archivos adicionales en el destino" en las "Opciones de publicación de archivos" dentro del panel "Configuración" del cuadro de diálogo Publicar.

¡Trabajado como un encanto!


Swashbuckle está ocultando el mensaje de error real debido a su configuración de CustomErrors en web.config. Si desactiva customErrors, debería recibir un mejor mensaje de error.

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