ASP.NET MVC 4アプリケーションでエラーが発生した場合、エラーの種類に応じてユーザーのビューをカスタマイズしたいと考えています。たとえば、ページが見つからないか、例外が発生しています(例外についてのユーザーフレンドリーな詳細があります)。私はStackOverflowや他のオンラインソースでこれを行う方法の他の例を調べましたが、答えのどれも私のために働いていません。ASP.NET MVC 4 - 例外処理が動作しない
基本的な[HandleError]属性は、.NET 4.5をターゲットとするMVC 4アプリケーションを使用するVS2012では機能していないようです。ここで私は私のホームコントローラを持っているコードは次のとおりです。
[HandleError]
public ActionResult Index()
{
Response.TrySkipIisCustomErrors = true; //doesn't work with or without this
throw new NullReferenceException("Uh oh, something broke.");
}
それはちょうど例外をスローして、と私はデフォルトの〜/共有/ Error.cshtmlビューがあるため、[のHandleError]属性を返されることを期待します、しかし私が得るのは、ページを表示できないことを示すHTTP 500 Internal Server Errorです。私はweb.configをチェックして、さまざまな設定が奇妙な動作をしているようです。セクションでは、現在含まれています
<customErrors mode="On" />
は(私も=「OFF」をdefaultRedirectでの追加とのcustomErrorsモードで試してみたが、それがどんな効果を持っていなかった...共有エラービューまたはどちらをCustomErrorsビューをレンダリングしていますが、customErrorsモードをoffに変更すると、例外の詳細が予想どおりに表示されるため、「Uh oh、something broken」例外が発生します。
私も試しましたOnExceptionハンドラをHomeControllerに追加すると、デバッグしてOnExceptionイベントが発生していることがわかりますが、違いはありません。
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
filterContext.ExceptionHandled = true;
if (filterContext == null)
{
filterContext.Result = View("CustomError");
return;
}
Exception e = filterContext.Exception;
// TODO: Log the exception here
ViewData["Exception"] = e; // pass the exception to the view
filterContext.Result = View("CustomError");
}
私はまた、ビューを指定し、[のHandleError]変更しようとしたが、それはどちらか何もしていないようだ。
[HandleError(View="CustomError")]
すべてのヘルプははるかに高く評価されるだろう。詳細が必要な場合はお知らせください。 customErrors
タグに次の属性を追加すること
web.configのどこにでも 'RemoteOnly'を使用していませんが、私の元のコードはローカルではなくリモートで動作するようです!それは私には非常に驚きです。ビューをレンダリングするために、 ' 'をweb.configの ''セクションに追加する必要がありましたが、それは正常です。これにより、ローカルでデバッグするのが難しくなり、 'mode = RemoteOnly'が使用されていないため、バグのように見えます。誰かがこれをローカルで動作させる方法を見つけたら、教えてください。 (私は具体的には2番目の質問を開くかもしれません。) –