キャッチオールエラーの手段として、私はこれをMVC WebアプリケーションのBaseControllerに追加しました。MVC OnExceptionで例外が処理されるのはなぜですか?
public class BaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
_logger.Error(filterContext.Exception, "Website error page displayed.");
TempData["ErrorMessage"] = "Unspecified error - please contact support";
filterContext.RouteData.Values["controller"] = "Error";
filterContext.Result = new ViewResult
{
ViewName = "Error",
};
filterContext.ExceptionHandled = true;
}
}
そして、私はこのようになり、専用のErrorControllerがあります。エラーはアプリケーションの一部で処理され、ユーザーがエラーページにリダイレクトされ、これが正常に動作すると
public class ErrorController : BaseController
{
[AllowAnonymous]
public ActionResult Error()
{
string errorMessage = "There has been an error";
if(TempData["ErrorMessage"] != null)
{
errorMessage = TempData["ErrorMessage"].ToString();
}
Logger.Warn("Error error page displayed with message {0}", errorMessage);
ViewBag.ErrorMessage = errorMessage;
return View("Error");
}
}
:
をif (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
TempData["ErrorMessage"] = "You must have a confirmed email to log on.";
return RedirectToAction("Error", "Error");
}
エラーが未処理であるとBaseController
にOnException
を経由する場合は、エラー表示は期待通りにレンダリングしますが、トンのエラー・アクション彼は決してヒットしない。エラーメッセージにはデフォルト値が設定されており、アクション内のブレークポイントはトリップしません。
これはなぜですか? OnException
からコントローラーアクションを正しく呼び出すにはどうすればよいですか?
[こちら](http://stackoverflow.com/questions/960280/asp-net-mvc-controller-onexception-not-being-called)を確認してください。 – Berkay
@Berkayそれはまったく問題ではありません。 OnExceptionが確実に呼び出されています。しかし、エラーコントローラにリダイレクトするとき、エラーアクションは呼び出されていません。 –
Resultプロパティを、名前で指定されたビューを返す 'ViewResult'のインスタンスに設定しています。 'ViewName =" Error "、'に別のビュー名を入れてチェックすることができます。 'viewnameが見つからないと言うべきです。'あなたが基本的に必要とするのは、コントローラの 'ErrorController'の' Error'アクションにリダイレクトすることです。 –