swagger-ui renvoie 500 après le déploiement

fonctionne parfaitement sur ma machine, aucun problème.

mais quand je me déploie dans notre environnement de test - je reçois le message suivant

500 : { "Message": "Une erreur s'est produite."} / api / swagger/docs / v1

enter image description here Le déploiement est à default web site/api

je suppose qu'il a quelque chose à faire avec le baseUrl ou quelque chose comme ça, mais je n'ai aucune idée de même par où commencer.

mes routes fonctionnent bien dans le projet - je peux appeler tous mes paramètres webapi et ils répondent correctement.

toute aide serait grandement apprécié

58
demandé sur VisualBean 2015-11-25 14:03:24

5 réponses

lors du débogage, j'utilisais la config de débogage (que J'avais générée pour Xmlcomments: Properties -> build tab -> Output -> XML Documentation File)

Je n'avais pas fait cela pour ma configuration de libération (duh... maintenant tout fonctionne

120
répondu VisualBean 2015-11-25 12:41:27

Swashbuckle cache le vrai message d'erreur en raison de votre paramétrage customErrors dans web.config. Si vous définissez customErrors à off, vous devriez obtenir un meilleur message d'erreur.

<system.web>
    <customErrors mode="Off"/>
</system.web>
10
répondu fodonnel 2016-08-30 23:59:29

comme indiqué dans la réponse acceptée, vous devez vous assurer que la sortie du fichier de documentation XML est dans bin et non bin\Debug ou bin\Release (vérifiez ceci pour toutes les configurations de construction).

j'ai quand même reçu la réponse 500 parce que j'utilise plusieurs fichiers de documentation XML. Dans ma mise en œuvre SwaggerConfig , j'ai inclus les fichiers de documentation XML de deux projets (le WebApi projet lui-même et une bibliothèque de classe qui est référencée par le projet 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));

le fichier de documentation XML du projet WebApi a été publié correctement dans le dossier bin du site, mais pas le fichier de documentation XML du projet référencé (même s'il figure dans le dossier bin du projet compilé ).

vous devez donc modifier le fichier du projet WebApi (.csproj) dans un éditeur de texte et ajoutez les sections suivantes en bas (remplacer 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>

voir comment inclure des fichiers supplémentaires en utilisant les paquets de déploiement web VS2010? pour une explication complète.

2
répondu Sven Vranckx 2017-11-12 19:35:31

le problème est que l'exécution de dotnet publish avec -r Release ne produit pas de fichier XML. Cependant, dotnet publish avec -r Debug produit effectivement le fichier. Cela explique pourquoi les gens ne sont confrontés à ce problème que lorsqu'ils se déploient dans des environnements autres que locaux, puis se donnent des coups de pied lorsque l'exception "find the" ne se produit que sur prod.(C'est la version) afin de reportoduce, il suffit d'exécuter ces commandes localement et de voir le répertoire de sortie et vous devriez voir le problème.

(mise à jour) le correctif pour moi était d'aller réellement dans .csproj fichier et ajouter une ligne pour s'assurer que le fichier a été copié toujours. Diff indiqué ci-dessous enter image description here

0
répondu joey 2017-07-17 20:09:43

la réponse acceptée devrait être la première chose que vous essayez.

cependant, j'ai ma sortie XML définie pour aller à App_Data\ et avoir mon Swashbuckle configuré pour lire à partir de ce répertoire, donc, il n'a pas d'importance de quelle façon il est construit: les fichiers xml vont 'être là'. Néanmoins, j'ai toujours l'erreur...

j'ai trouvé plus à forums de MSDN réponse de @enough2012:

sélectionnez " Supprimer des fichiers supplémentaires à destination "dans les" Options de publication de fichiers "dans le volet" Paramètres " de la boîte de dialogue Publier.

a fonctionné comme un charme!

0
répondu bkwdesign 2017-08-04 12:40:01