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