2011-01-28 16 views
6

私は自分のルートを設定する方法を理解していますが、ルーティングテーブルのクラックに該当するルートはどのように扱いますか?私は、デフォルトの{controller}/{action}/{id}ルートが一般的なキャッチオールかもしれないと思いますが、それがどうなるかわかりません。私は、ユーザーに、彼らが存在しないデータ/「ページ」をリクエストしたことを知らせるのが好きです。ASP.NET MVCでのルートエラーの処理

[HandleError]フィルタはどこにありますか?それはどのように機能しますか?

答えて

7

ルートが見つからない場合は、通常のHTTP 404エラーとして処理します。

クラスまたはアクションに[HandleError]属性のみを追加すると、MVCはビューフォルダ内でErrorビューを探します。

またErrorController、あるいは静的なページを追加し、Web.configにこれを追加することができます。

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

それとも、プログラムErrorControllerにごGlobal.asax.csとルートでHTTP 404を扱うことができます。それは私が、一般的にそれを行う方法は次のとおりです。このアプローチの

protected void Application_Error(object sender, EventArgs e) 
{ 
    var ex = Server.GetLastError().GetBaseException(); 

    var routeData = new RouteData(); 

    if (ex.GetType() == typeof(HttpException)) 
    { 
     var httpException = (HttpException)ex; 

     switch (httpException.GetHttpCode()) 
     { 
      case 404: 
       routeData.Values.Add("action", "PageNotFound"); 
       break; 
      default: 
       routeData.Values.Add("action", "GeneralError"); 
       break; 
     } 
    } 
    else 
    { 
     routeData.Values.Add("action", "GeneralError"); 
    } 

    routeData.Values.Add("controller", "Error"); 
    routeData.Values.Add("error", ex); 

    IController errorController = new ErrorController(); 
    errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 
} 
4

あなたは、このようなルートを定義することができます。このルートは、それがすべての要求をキャッチしますそのように最後に追加されsould

 public ActionResult PageNotFound() 
     { 
      ViewBag.Message = "Sorry, the page you requested does not exist."; 
      return View(); 
     } 

routes.MapRoute(
       "PageNotFound", 
       "{*catchall}", 
       new { controller = "Home", action = "PageNotFound" } 
       ); 

このようなコントローラでアクションを作るよりをマップすることはできません。

HandleError属性は、コントローラアクション内で発生する可能性がある例外をキャッチするために使用されます。

+0

問題は、あなたが間違った値を持つ子どもの行動の@ Html.Action(routeValues)をレンダリングしよう..それは 'PartialView'として' PageNotFound'アクションをレンダリングするということです例外を実際に報告することはありません。 – Nenad

関連する問題