2011-06-28 10 views
5

ASP.NET MVC 3でカスタムエラーページを作成する最適な方法は何ですか?私が特に興味を持っているのは、404エラーだけでなく、403などです。私はMVCフレームワークが初めてです。伝統的に私はPHPのバックグラウンドから来ていますが、すぐに勉強しています。ASP.NET MVC 3でカスタム404エラーページを作成するには?

私はこの質問を投稿する前に私の研究を行なったし、このリンクに出くわした: Custom error pages on asp.net MVC3

ソリューションは、単純なようだということ、私は私のマシン上でそれを実装しようとすると、私は次の行に問題を得るものの:IController errorsControllerを=新しいErrorsController(); Application_Error()関数の内部にあります。それは「あなたがusingディレクティブまたはアセンブリ参照が不足している(型または名前空間名 『ErrorsController』が見つかりませんでした?」と言う。

はあなたが提供することの助けを事前にいただきありがとうございます。

+0

可能な複製[ASP.NET MVCで404を正しく処理する方法は?](http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net -mvc) –

答えて

15

あなたが設定する必要がありますあなたのweb.configファイル内

<httpErrors> 

セクション

<system.webServer> 

下のセクション・グループ。

この記事を参照してください。また、あなたは、あなたの質問にリンクされたエラーコントローラを使用することができます

http://www.iis.net/ConfigReference/system.webServer/httpErrors

、しかし初期の流れは、IISによって管理されるべきです。このセクションでは、コントローラに管理されているURLをIISが実行するように指示できます。

また、提案されたソリューションがブラウザで紛らわしい "200 OK"を返すので、コントローラのアクションに適切なResponse.Statusプロパティ文字列を注意してください。例

public class ErrorsController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.Status = "404 Not Found"; 
     return View(); 
    } 

    public ActionResult ServerError() 
    { 
     byte[] delay = new byte[1]; 
     RandomNumberGenerator prng = new RNGCryptoServiceProvider(); 

     prng.GetBytes(delay); 
     Thread.Sleep((int)delay[0]); 

     IDisposable disposable = prng as IDisposable; 
     if (disposable != null) { disposable.Dispose(); } 
     Response.Status = "500 Internal Server Error"; 
     return View(); 
    } 

} 

設定例:

<httpErrors defaultPath="/error.htm" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL"> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="500" path="/errors/servererror/" responseMode="ExecuteURL" /> 
     <error statusCode="404" path="/errors/notfound/" responseMode="ExecuteURL" /> 
    </httpErrors> 

あなたは "subStatusCode" 属性を使用して404.3とその他を制御することができます。

関連する問題