4

ASP.NET MVC 4 アプリケーションでは、次のようにキャッチオール ルートを設定しました。

routes.MapRoute( 
     name: "UnKnown",  
     url: "{*url}",  
     defaults: new { controller = "CatchAll", action = "UnknownUrl" });

CatchAllController の UnknownUrl メソッドは、そのビューを開発環境に正しくロードします。

ただし、実稼働環境の IIS 7.5 では、存在しないリモート リクエストが到着すると、標準の 404 ページが表示されます。サーバー自体で RDP を使用して送信されたローカル リクエストは正常に機能します

web.config は tp に設定されています

<customErrors mode="Off"/>

ローカル コールとリモート コールには他にどのような違いがありますか? MVC HttpHandler にこれらのリクエストをキャッチさせるにはどうすればよいでしょうか?

リモートで呼び出されたときに、IIS に詳細なステータス 500 エラー メッセージを表示させることもできなかったことがヒントかもしれません

4

2 に答える 2

3

IIS で .NET エラーではなく既定のエラーが表示されるという問題がありsystem.webServerました。web.config で次のように修正しました。

<httpErrors existingResponse="PassThrough"/>

UnknownUrlこれは、アクションで設定している場合に発生すると思いますResponse.StatusCode = 404;。デフォルトでは、IIS はユーザーがエラー コードを返していることを認識し、デフォルトのエラー メッセージを表示します。これは、その構成設定で上書きできます。

これがローカルとリモートで異なるかどうかはわかりませんが、試してみる価値はあります。

于 2013-04-24T10:37:17.200 に答える
1

ホストヘッダーを設定してみてください-これがローカルと本番の違いの原因だと思います:

new { controller = "CatchAll", action = "UnknownUrl", host = HttpContext.Current.Request.Url.Host}

の Application_BeginRequest からこのルートを登録しますGlobal.asax。また、これが 1 回だけ行われることを確認してください。おそらく次のようなチェックによって行われます。

if (routes["UnKnown"] == null)
        {
            routes.MapRoute( 
                name: "UnKnown",  
                url: "{*url}",
                defaults: new { controller = "CatchAll", action = "UnknownUrl", host = HttpContext.Current.Request.Url.Host}
            );
        }
于 2013-04-24T08:07:46.927 に答える