2017-07-18 13 views
1

(MVC Webアプリケーション内)すべてのエラーに対して404ページが必要です。私は、web.configファイルを編集している。このライン:Asp.net MVC web.configのカスタマー・エラー

<customErrors mode="On"> 
    <error redirect="/error/404" statusCode="404" /> 
</customErros> 

It'workが、ブラウザのURLに私はURL /エラー/ 404を参照してください。私はどのように呼び出されたURLを見ることができますか?

ありがとうございました。

答えて

0

customErrorsノードは実際にはhttpErrorsより古いので、代わりにこれを試してください。あなたがsystem.webServerノードの子としてあなたweb.configにこれらのノードを持っていることを確認してください:

<httpErrors> 
    <error statusCode="404" path="/error/404" responseMode="ExecuteURL" /> 
</httpErrors> 

別の方法としては、customErrorsと、この二つの方法を行うことができます。 まず第二はcustomErrorsを変更することで、個々のerrorノードを修正することですノード。私はこれらのうちの1つが時代遅れになっているのを覚えていませんが、両方を試してみてください。

<error statusCode="404" path="/error/404" responseMode="ExecuteURL"/> 

または

<customErrors mode="On" redirectMode="ResponseRewrite"> 

何よりも働いていない何かがアップになる場合。 IISログをチェックしましたか?

リンク

httpErrors Documentation

Custom Errors Element documentation(アーカイブ)

+0

こんにちは、私の問題を解決せずに両方のソリューションをお試しください。私はhttp://example.com/1234を試して(と私はルートを持っていない)サーバーは、ランタイムエラーとエラー/ 404ルートへのリダイレクトエラーで応答します。 http://example.com/1234/123(2つのパラメータ)を試してみると、これは経路で傍受され、コントローラを通過し、エラー/ 404にリダイレクトされます(ページが見つからない場合はコントローラアクションのリダイレクトがあるため)ホームコントローラのルート。ありがとう –

+0

私はglobal.asaxでApplication_errorを使って部分的に解決します。 –

0

Iは、部分のglobal.asaxでのApplication_Errorを用いて解決します。このメソッドを追加しました

protected void Application_Error(object sender, EventArgs e) 
    { 
     var exception = Server.GetLastError(); 
     var httpException = exception as HttpException; 
     if (httpException != null && httpException.GetHttpCode() == 404) 
     { 
      Response.Clear(); 
      Server.ClearError(); 
      Response.TrySkipIisCustomErrors = true; 

      IController controller = new CommonController(); 

      var routeData = new RouteData(); 
      routeData.Values.Add("controller", "Common"); 
      routeData.Values.Add("action", "PageNotFound"); 

      var requestContext = new RequestContext(
       new HttpContextWrapper(Context), routeData); 
      controller.Execute(requestContext); 

     } 
     } 

この作業は問題ありません。コントローラからの問題です。 dbレコードが見つからない場合は、デフォルトのエラーページで404エラーを返します。私はリダイレクトURLではなくオリジナルのURLをブラウザに表示したい。戻り値を使用してView();コントローラでは、これは起こりません。どのように私はそれを解決することができます?ありがとう。

関連する問題