185

私は ASP.NET MVC 4 WebApi を使用しており、IIS Express のローカル コンピューターで実行することをとても楽しんでいます。リモート マシンにもサービスを提供するように IIS Express を構成したので、社内の他の人が私のコンピューターを Web サーバーとして使用しています。

これは最適とは言えない解決策であると判断した後、.NET 4.5 をインストールした後、WebApi をリモート サーバーに配置することにしました。フィドラーを使用してローカル マシンのコントローラーに POST を送信すると、正しい応答が返されますが、IIS7 を実行している Web サーバーにドメインを変更すると、同じ POST が不可解なメッセージを返します。

{"メッセージ":"エラーが発生しました"}

メッセージ。何が起こっているのか誰にも分かりますか?

4

9 に答える 9

292

問題は、サーバー上ではなくローカル マシン上にある依存関係の欠落でした。私たちの場合、それは Devart.Data.Linq dll でした。

その答えを得るために、500 エラーの IIS トレースをオンにしました。少しの情報が得られましたが、本当に役立つのは web.config の設定で、<system.web><customErrors mode="Off"/></system.web>これは動的に読み込まれる依存関係が欠落していることを示していました。この依存関係を追加し、ローカルにコピーするように指示した後、サーバーは動作を開始しました。

于 2012-10-24T03:37:56.923 に答える
104

基本的:

IncludeErrorDetailPolicy解決しない場合は代わりに使用CustomErrorsしてください (たとえば、ASP.NET スタックが 2012 年を超える場合):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

注: 詳細なエラー情報を返すと、機密情報が「ハッカー」に明らかになる可能性があることに注意してください。以下のこの回答に関するサイモンのコメントを参照してください。

TL;DR バージョン

私にとってCustomErrorsは本当に役に立ちませんでした。すでに に設定されていましたOffが、まだわずかなan error has occurredメッセージしか表示されませんでした。受け入れられた答えは、今日のWeb用語では長い3年前のものだと思います。私は Web API 2 と ASP.NET 5 (MVC 5) を使用しており、Microsoft は IIS のみの戦略から離れましたが、CustomErrors古い学校の IIS です ;)。

とにかく、私は地元にはない生産上の問題を抱えていました。そして、開発マシンのように Chrome の [ネットワーク] タブにエラーが表示されないことがわかりました。最後に、本番サーバーにChromeをインストールし、サーバー自体(「localhost」など)でアプリを参照することで、問題を解決できました。その後、スタック トレースとすべてでより詳細なエラーが表示されました。

その後、Jimmy Bogard の記事を見つけました(注: Jimmy is mr. AutoMapper! )。面白いことに、彼の記事も 2012 年のものですが、その中で彼は、CustomErrorsこれはもう役に立たないと説明していますがIncludeErrorDetailPolicy、グローバル WebApi 構成で別の設定を行うことで「エラーの詳細」を変更できると説明しています (例: WebApiConfig.cs):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

幸いなことに、彼は webapi (2) DOES が設定をリッスンするように設定する方法も説明していCustomErrorsます。これは非常に賢明なアプローチであり、これにより 2012 年に戻ることができます :P.

注: デフォルト値は「LocalOnly」です。これは、この投稿を見つける前に、説明した方法で問題を解決できた理由を説明しています。しかし、すべての人がリモートで本番環境にアクセスしてブラウザーを起動できるわけではないことは理解しています (フリーランスと DevOps に移行するまで、ほとんどの場合はできませんでした)。

于 2015-11-20T20:01:00.460 に答える
15

テスト環境でエラーが発生すると、いつもこの質問に行き着きます。「これは以前にも実行したことがありますが、コードを変更してテスト環境に再デプロイすることなく、web.config で直接実行できます。 、でも 2 回の変更が必要です。

今後の参考のために

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

<system.webServer>
  <httpErrors errorMode="Detailed" existingResponse="PassThrough"></httpErrors>
</system.webServer>
于 2017-02-06T21:34:58.627 に答える