web-dev-qa-db-ja.com

swagger-uiはデプロイ後に500を返します

すぐに使用できる構成は、私のマシンで完全に機能し、まったく問題ありません。

しかし、テスト環境にデプロイすると、次のメッセージが表示されます

500:{"メッセージ": "エラーが発生しました。" }/api/swagger/docs/v1

enter image description here 展開先はdefault web site/api

それはbaseUrlまたはそのようなものと関係があると推測していますが、どこから始めてもわからない。

私のルートはプロジェクト内で正常に機能します。すべてのwebapiエンドポイントを呼び出すことができ、それらは正しく応答します。

どんな助けも大歓迎です

68
VisualBean

デバッグ時には、デバッグ構成を使用していました(プロパティ->ビルドタブ->出力-> XMLドキュメントファイルのXmlCommentsを生成しました)。

リリース構成でこれを行っていませんでした(...)

145
VisualBean

Swashbuckleは、web.configのcustomErrors設定が原因で実際​​のエラーメッセージを隠しています。 customErrorsをoffに設定すると、より良いエラーメッセージが表示されます。

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

受け入れられた回答に記載されているように、XMLドキュメントファイルの出力がbinであり、bin\Debugまたはbin\Release(すべてのビルド構成でこれを確認します)。

複数のXMLドキュメントファイルを使用しているため、まだ500の応答がありました。私のSwaggerConfig実装には、2つのプロジェクト(WebApiプロジェクト自体とWebApiプロジェクトによって参照されるクラスライブラリ)のXMLドキュメントファイルが含まれています。

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

WebApiプロジェクトのXMLドキュメントファイルは、サイトのbinフォルダーに正しく公開されましたが、参照プロジェクトのXMLドキュメントファイルは(のbinフォルダーに表示されていても) compileプロジェクト)。

そのため、テキストエディターでWebApiプロジェクトファイル(.csproj)を変更し、下部に次のセクションを追加する必要があります(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>

詳細な説明については、 VS2010 Web展開パッケージを使用して追加ファイルを含める方法 を参照してください。

2
Sven Vranckx

ありがとう@VisualBean。

それは私にとってそれほど明白ではなかったので....方法...シンプルなイメージ。

[プロジェクト]> [プロジェクトのプロパティ]> [ビルド]タブ

enter image description here

1
stefmex

受け入れられた答えは、あなたが最初に試すべきものです。

ただし、XML出力をApp_Data \に設定し、Swashbuckleをそのディレクトリから読み取るように設定しているため、どの方法でビルドするかは関係ありません。xmlファイルは「存在する」ことになります。それにもかかわらず、私はまだエラーを受け取っていました...

MSDNのフォーラム @ enough2012の答え:

[公開]ダイアログの[設定]ペインにある[ファイル公開オプション]で[宛先の追加ファイルを削除]を選択します。

魅力のように働いた!

0
bkwdesign

問題は、dotnet publish with -r ReleaseはXMLファイルを生成しません。しかしながら、 dotnet publish with -r Debugは実際にファイルを生成します。これは、人々がローカル以外の環境に展開しているときにのみこの問題を取得し、prodでのみ例外が検出されたときに自分自身を蹴る理由を説明します(そのリリース)単純にそれらのコマンドをローカルで実行し、出力を表示しますディレクトリと問題が表示されるはずです。

(更新)私にとっての修正は、実際に.csprojファイルに移動し、ファイルが常にコピーされるように行を追加することでした。以下に示す差分 enter image description here

0
joey