webentwicklung-frage-antwort-db.com.de

swagger-ui gibt nach der Bereitstellung 500 zurück

Die Out-of-the-Box-Konfiguration funktioniert einwandfrei auf meiner Maschine, überhaupt keine Probleme.

Bei der Bereitstellung in unserer Testumgebung wird jedoch die folgende Meldung angezeigt

500: {"Message": "Ein Fehler ist aufgetreten." }/api/swagger/docs/v1

 enter image description here Die Bereitstellung erfolgt zu default web site/api

Ich vermute, es hat etwas mit der baseUrl oder so etwas zu tun.

Meine Routen funktionieren gut im Projekt - ich kann alle meine Webapi-Endpunkte aufrufen und sie reagieren korrekt.

jede Hilfe wäre sehr dankbar

61
VisualBean

Beim Debuggen habe ich die Debug-Konfiguration verwendet (für die ich XmlComments generiert hatte: Eigenschaften -> Build-Registerkarte -> Ausgabe -> XML-Dokumentationsdatei)

Ich hatte das nicht für meine Release-Konfiguration gemacht (duh ...) - jetzt funktioniert alles 

132
VisualBean

Swashbuckle verbirgt die echte Fehlermeldung aufgrund Ihrer customErrors-Einstellung in web.config Wenn Sie customErrors auf off setzen, sollten Sie eine bessere Fehlermeldung erhalten.

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

Wie in der akzeptierten Antwort angegeben, müssen Sie sicherstellen, dass die Ausgabe der XML-Dokumentationsdatei in bin und nicht in bin\Debug oder bin\Release erfolgt (überprüfen Sie dies für alle Build-Konfigurationen).

Ich habe immer noch die 500-Antwort erhalten, weil ich mehrere XML-Dokumentationsdateien verwende . In meiner SwaggerConfig -Implementierung füge ich XML-Dokumentationsdateien aus zwei Projekten hinzu (das WebApi-Projekt selbst und eine Klassenbibliothek, auf die der WebApi verweist Projekt):

c.IncludeXmlComments(string.Format(@"{0}\bin\MyWebApiProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
c.IncludeXmlComments(string.Format(@"{0}\bin\ReferencedProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));

Die XML-Dokumentationsdatei des WebApi-Projekts wurde ordnungsgemäß im Ordner bin der Site veröffentlicht. Die XML-Dokumentationsdatei des referenzierten Projekts war jedoch nicht vorhanden (obwohl sie im Ordner bin des Ordners compiled angezeigt wird).

Sie müssen also die WebApi-Projektdatei (.csproj) in einem Texteditor ändern und unten die folgenden Abschnitte hinzufügen (ersetzen Sie 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>

Siehe Wie fügen Sie zusätzliche Dateien mit VS2010-Webbereitstellungspaketen hinzu? für eine vollständige Erklärung.

2
Sven Vranckx

vielen Dank @VisualBean.

Da war es für mich nicht so offensichtlich .... wie man ... ein einfaches Bild macht.

In Projekt> Ihre Projekteigenschaften> Registerkarte Erstellen

enter image description here

1
stefmex

Die akzeptierte Antwort sollte das erste sein, was Sie versuchen. 

Ich habe meine XML-Ausgabe jedoch so eingestellt, dass sie zu App_Data\wechselt, und mein Swashbuckle ist so konfiguriert, dass es aus diesem Verzeichnis liest. Es ist also egal, auf welche Weise es erstellt wird: Die XML-Dateien werden "da sein". Trotzdem bekam ich immer noch den Fehler ...

Ich habe in MSDNs Foren vorgefunden @ enough2012's Antwort:

wählen Sie im Dialogfeld "Einstellungen" des Dialogfelds "Veröffentlichen" im Bereich "Einstellungen" die Option "Zusätzliche Dateien am Zielort entfernen" aus.

Lief wie am Schnürchen!

0
bkwdesign

Das Problem ist, dass die Ausführung von dotnet publish mit -r Release keine XML-Datei erzeugt. dotnet publish mit -r Debug erstellt jedoch tatsächlich die Datei. Dies erklärt, warum Personen dieses Problem nur dann erhalten, wenn sie in Umgebungen mit ANDEREN als in lokalen Umgebungen bereitgestellt werden und sich dann selbst treten, wenn das Finden der Ausnahme nur bei prod auftritt Verzeichnis und Sie sollten das Problem sehen. 

(UPDATE) Der Fix für mich bestand darin, in die .csproj-Datei zu gehen und eine Zeile hinzuzufügen, um sicherzustellen, dass die Datei immer kopiert wurde. Diff unten gezeigt  enter image description here

0
joey