2011-07-25 20 views
2

私は多くの記事といくつかの記事(ここではstackoverflowを含む)を読んだことがありますが、間違っていることはわかりません。カスタムHandleErrorAttributeでエラーが発生しない

ここに私のコード:

Global.asax.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
} 

ErrorControler.cs

public class ErrorController : Controller 
{ 
    public ActionResult Error404() 
    { 
     return View(); 
    } 

    public ActionResult Error500() 
    { 
     return View(); 
    } 
} 

のWeb.config

サーバーエラー:私はパスにアクセスしようとすると/MyController次のメッセージが表示されます

@model System.Web.Mvc.HandleErrorInfo 
@{ 
    ViewBag.Title = "Erro"; 
} 

<h2>@ViewBag.Title</h2> 
<div id="error-info"> 
    <p>Ocorreu um erro inexperado na página <a class="error-url" href="@Response["aspxerrorpath"]" title="Origem do erro">@Response["aspxerrorpath"]</a></p> 
    <p>Se o erro persistir, por-favor, entre em contato com os administradores do site.</p> 
    <div class="error-details"> 
     <p>@Model.Exception.Message</p> 
    </div> 
</div> 
<customErrors mode="On" defaultRedirect="~/Error/Error500"> 
    <error statusCode="404" redirect="~/Error/Error404"/> 
</customErrors> 

MyController.cs

public ActionResult Index() 
{ 
    using (var db = new DataContext()) 
    { 
     int a = 2, b = 0; 
     var r = a/b; 
     return View(r); 
    } 
} 

Error500.cshtml '/'のAppl ication。

リソースが見つかりません。

概要HTTP 404。探しているリソース(またはその 依存関係の1つ)が削除されたか、名前が変更されたか、または が一時的に利用できませんでした。次のURLを参照し、 のスペルが正しいことを確認してください。

要求されたURL:/エラー/ Error500

私はHTTPステータスコードは、web.configファイルには知らされていない場合は任意のコントローラ上の誤りが、それはデフォルトのビューにリダイレクトする際にそれが起こるたいError500

たとえば、this articleでは、DbExceptionエラーを処理しますが、エラーの種類を処理したいと考えています。

タイプ404(ページが見つかりません)のエラーは完全に機能します。あなたはこれがあなたのGlobal.asaxから次の行を/削除コメントが起こるしたい場合は、ユーザーがページError404.cshtml

答えて

8

にリダイレクトされます。

filters.Add(new HandleErrorAttribute()); 

あなたは基本的にあなたがASP.NETがあなたのエラーを処理するかどうかを選択する必要があります(あなたのweb.configファイル内<customErrors>セクション)またはhandling errors in ASP.NET MVCのための別の方法を

またはチェックアウト(経由してweb.configファイルでカスタムエラーをオンにする必要がありますグローバルHandleErrorAttributeアクションフィルタ、)ASp.NET MVC(この近道あなたはまだ私があなたのGlobal.asaxから示した行を削除する必要があります。

+0

私は 'filters.Add(new HandleErrorAttribute()) '行にコメントしましたが、それでも同じ動作を続けました。 このリンクは、トピックの調査中に見つけたリンクの1つですが、 'Application_Error'を使用したくありません。 私のアプリケーションのエラーを処理するのに 'HandleErrorAttribute'を使います。 – ridermansb

+0

@Riderman de Sousa Barbosa、新しいASP.NET MVC 3プロジェクトで説明した手順を正確に行い、答えに示されているようにカスタムエラー行を削除し、web.configに表示された内容を追加し、Indexアクションを変更しましたあなたが見せたものと一致するHomeControllerのもので、それは私にとって完璧に機能しました。 –

+0

私はエラーを発見しました! 何らかの理由で、リンク上でエラーが発生しました。 '@Response [" aspxerrorpath "]'私はこの行にコメントしました。 エラーログに次のメッセージが記録されているのを見て、これを見つけました。 []でインデックス付けを 'System.Web.HttpResponseBase'の式に適用できません – ridermansb

関連する問題