web-dev-qa-db-fra.com

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

La configuration prête à l'emploi fonctionne parfaitement sur ma machine, aucun problème.

Mais lorsque je déploie dans notre environnement de test, le message suivant s'affiche

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

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

Je suppose que cela a quelque chose à voir avec la baseUrl ou quelque chose comme ça, mais je ne sais même pas par où commencer.

Mes itinéraires fonctionnent correctement dans le cadre du projet - je peux appeler tous les points de terminaison webapi et ils répondent correctement.

toute aide serait très appréciée

61
VisualBean

Lors du débogage, j'utilisais la configuration de débogage (pour laquelle j'avais généré XmlComments pour: Propriétés -> onglet Générer -> Sortie -> Fichier de documentation XML)

Je n'avais pas fait cela pour ma configuration de version (duh ...) - maintenant tout fonctionne 

132
VisualBean

Swashbuckle cache le vrai message d'erreur en raison de votre paramètre customErrors dans web.config. Si vous désactivez customErrors, vous devriez obtenir un meilleur message d'erreur.

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

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

J'ai toujours la réponse 500 parce que j'utilise plusieurs fichiers de documentation XML . Dans mon implémentation SwaggerConfig, j'inclus des fichiers de documentation XML de deux projets (le projet WebApi lui-même et une bibliothèque de classes référencée par WebApi projet):

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 apparaît dans le dossier bin du projet compiled).

Vous devez donc modifier le fichier de projet WebApi (.csproj) dans un éditeur de texte et ajouter 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 à l'aide de packages de déploiement Web VS2010? pour une explication complète.

2
Sven Vranckx

merci @VisualBean.

Comme ce n'était pas si évident pour moi… comment… une image simple.

Dans Projet> Propriétés de votre projet> Onglet Générer

enter image description here

1
stefmex

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

Cependant, ma sortie XML est configurée pour aller à App_Data\et mon Swashbuckle est configuré pour lire à partir de ce répertoire. Par conséquent, peu importe la façon dont il est construit: les fichiers xml vont "être là". Néanmoins, j'avais toujours l'erreur ...

J'ai trouvé sur les forums MSDN la réponse de @ ask2012:

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

Travaillé comme un charme!

0
bkwdesign

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 utilisateurs ne rencontrent ce problème que lorsqu'ils se déploient dans des environnements AUTRES que localement, puis se lancent quand la exception d'exception ne se produit que lors de la production (ITS THE RELEASE). répertoire et vous devriez voir le problème. 

(UPDATE) Le correctif pour moi était d’aller dans un fichier .csproj et d’ajouter une ligne pour s’assurer que le fichier était toujours copié. Diff ci-dessous  enter image description here

0
joey