iis 7 - 読み込めませんでした - WebApi の{"メッセージ":"エラーが発生しました"} IIS7 で、IIS Express では発生していません。




パーサーエラー 読み込めませんでした (4)

基本的に:

CustomErrors解決できない場合は、 IncludeErrorDetailPolicy代わりに使用します(たとえば、ASP.NETスタックが> 2012の場合)。

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

注意:詳細なエラー情報を返すことで、機密情報が「ハッカー」に漏れることに注意してください。 以下のこの回答に関するSimonのコメントを参照してください。

TL; DRバージョン

私にとってCustomErrorsは本当に役に立たなかった。 それはすでにOffに設定されていましたが、私はまだ穏やかan error has occurredというメッセージan error has occurred表示されます。 私は受け入れられた答えが3年前からであると思います。これは現在、Webの言葉では長い時間です。 私はWeb API 2とASP.NET 5(MVC 5)を使用していますが、MicrosoftはIIS専用の戦略から離れていますが、 CustomErrorsは古いSkool IISです。

とにかく、私はローカルでは持っていなかった生産上の問題がありました。 そして、私の開発マシンでできるように、Chromeの[ネットワーク]タブでエラーが表示されないことがわかりました。 最終的には、プロダクションサーバーにChromeをインストールしてから、サーバー自体にアプリケーションをブラウズすることで解決しました(「localhost」など)。 スタックトレースとすべてで、より詳細なエラーが発生しました。

その後、私はJimmy Bogardからこの記事を見つけました(注:JimmyはAutoMapperさんです! )。 面白いことに、彼の記事は2012年の記事でもありますが、 CustomErrorsはもうこれで役に立たないと説明していますが、グローバルWebApi設定で別のIncludeErrorDetailPolicyを設定することで 'エラーの詳細'を変更できます。 WebApiConfig.cs ):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

幸運にも彼はwebapi(2)がCustomErrors設定を聞くことをセットアップする方法についても説明します。 これはかなり賢明なアプローチです。これにより2012年に戻ることができます:P。

注:デフォルト値は 'LocalOnly'です。この記事を見つける前に、私が記述した方法で問題を解決できた理由を説明しています。 しかし、私は、誰もがプロダクションとスタートアップを遠隔操作できるだけではないことを理解しています(私はフリーランスとデベロッパーになることを決意するまではほとんどできませんでした)。

https://code.i-harness.com

私はASP.NET MVC 4 WebApiを使って作業しており、IIS Expressのローカルコンピュータで実行しているので面白いです。 リモートコンピュータにもサービスを提供するようにIIS Expressを構成しました。私の会社のWebサーバーは、Webサーバーとしてコンピュータを使用しています。

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

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

メッセージ。 誰でも何が起こっているのか考えている?


WebAPIエンドポイントに投稿するときも同様の問題がありました。 CustomErrors = Offを回すことで、DLLの1つである実際のエラーを見ることができました。


テスト環境でエラーが発生したとき、私はいつもこの質問に遭遇します。「以前はこれをやったことがありますが、コードを修正してテスト環境に再デプロイする必要はありません。しかし、それは2つの変更を必要とする...それはもう何だった?

今後の参考のために

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

そして

<system.webServer>
  <httpErrors errorMode="Detailed" existingResponse="PassThrough"></httpErrors>
</system.webServer>

他の答えは私のために働いたことはありません。

これは、(Startup.csで)

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();

        WebApiConfig.Register(config);

        // Here: 
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }
}

(またはWebApiConfig.csに入れることもできます)。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        // Here: 
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }
}




asp.net-web-api