Asp.net mvc 3のエラーを処理するための組み込みまたは適切な方法はありますか?
これは私がしたいことです:
私は次の方法を見つけました:
これを適切に処理するにはどうすればよいですか?
ソリューションが類似しているか、上記のリストの#1のようである場合、私はninjectを使用しており、基本クラスを作成していません。これをどうやってやるの?
グローバルエラー処理の場合
web.configページのcustomErrors mode = "On"を変更するだけです
ErrorはError.cshtmlが共有フォルダにあることで表示されます。
Error.cshtmlレイアウトがnullでないことを確認してください。
[次のようになります:@ {Layout = "〜/ Views/Shared/_Layout.cshtml"; }
またはLayout = nullコードブロックを削除]
Error.cshtmlのサンプルマークアップ:-
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
@model System.Web.Mvc.HandleErrorInfo
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
</head>
<body>
<h2>
Sorry, an error occurred while processing your request.
</h2>
<p>Controller Name: @Model.ControllerName</p>
<p>Action Name : @Model.ActionName</p>
<p>Message: @Model.Exception.Message</p>
</body>
</html>
特定のエラー処理について
コントローラクラスの特定のアクションにHandleError属性を追加します。その特定のエラーに「View」と「ExceptionType」を提供します。
サンプルのNotImplemented Exception Handler:
public class MyController: Controller
{
[HandleError(View = "NotImplErrorView", ExceptionType=typeof(NotImplementedException))]
public ActionResult Index()
{
throw new NotImplementedException("This method is not implemented.");
return View();
}
}
カスタムHandleErrorAttributeアクションフィルターを実装することをお勧めします。
詳細については、このリンクを参照してください。
http://msdn.Microsoft.com/en-us/library/dd410203%28v=vs.90%29.aspx
HandleErrorAttributeアクションフィルターを設定すると、フィルターによって処理されるアクションを完全に制御できます。また、カスタムベースコントローラーで設定し、すべてのコントローラは基本コントローラから継承します。
私がこれで行う別のことは、カスタムページではなく、Json応答を返すことによってAjax呼び出しに応答する個別のHandleJsonErrorAttributeがあることです。
UPDATE:
以下のいくつかの質問に従って、ここで私が使用するHandleJsonErrorAttribute
の例を示します。
public class HandleJsonErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
var serviceException = filterContext.Exception as ServiceException;
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.Result = new JsonResult { Data = new { message = serviceException == null ? "There was a problem with that request." : serviceException.Message } };
filterContext.ExceptionHandled = true;
}
}
そして、これらの手に負わない例外を処理するために使用するjQueryは次のとおりです。
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
showPopdown($.parseJSON(jqXHR.responseText).message);
});
これにより、私のAjaxメソッドを非常に軽量にすることができます。これらのメソッドは通常のJsonの戻りを処理するだけであり、ハンドリングされない例外が発生した場合、エラーステータスコードを含むメッセージがJsonにラップされて返されます。
また、私の実装では、サービスからスローするカスタムServiceException
があり、これにより、汎用メッセージの代わりにサービスレイヤーからメッセージが送信されます。
あなたがそれを行うことができると思う最も簡単な方法は、elmahライブラリを使用することです。
これを見てください: http://code.google.com/p/elmah/wiki/MVC そしてこれ http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo。 aspx
ASP.NET MVC 3プロジェクトをいつでも作成できるので、ExceptionHandler属性を使用するのが最も簡単な方法だと思います。カスタムエラーページを使用し、通常どおりグローバルApplication_Errorメソッドで例外を処理するようにWeb.configを構成することはできますが、例外が発生すると、URLは新しいMVC 3の方法のように表示されません。
例外処理の方法をカスタマイズする場合は、MVCでカスタム例外を作成できます。ここで役立つ投稿を見つけることができます。 http://www.professionals-helpdesk.com/2012/07/creating-custom-exception-filter-in-mvc.html