MVCアプリ、クライアントがサーバーに要求を行い、エラーが発生し、クライアントにメッセージを送り返したい。 HttpStatusCodeResultを試しましたが、メッセージなしで404を返すだけです。エラーの詳細がクライアントに返される必要があります。
public ActionResult GetPLUAndDeptInfo(string authCode)
{
try
{
//code everything works fine
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return new HttpStatusCodeResult(404, "Error in cloud - GetPLUInfo" + ex.Message);
}
}
ユーザーにわかりやすいエラーメッセージがあるビューを返す必要があります
catch (Exception ex)
{
// to do :log error
return View("Error");
}
例外の内部詳細(例外スタックトレースなど)をユーザーに表示しないでください。関連する情報をエラーログに記録して、問題を解決できるようにしてください。
リクエストがajaxリクエストの場合、適切なステータスフラグを含むJSONレスポンスを返すことができます。クライアントはこれを評価し、さらにアクションを実行できます
[HttpPost]
public ActionResult Create(CustomerVM model)
{
try
{
//save customer
return Json(new { status="success",message="customer created"});
}
catch(Exception ex)
{
//to do: log error
return Json(new { status="error",message="error creating customer"});
}
}
ユーザーが送信したフォームにエラーを表示する場合、ModelState.AddModelError
などのHtmlヘルパーメソッドと一緒にHtml.ValidationSummary
メソッドを使用して、送信したフォームでユーザーにエラーを表示できます。
1つのアプローチは、ModelState
を使用することです。
ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);
そして、ビューで次のようなことをします:
@Html.ValidationSummary()
エラーを表示する場所。エラーがない場合は表示されませんが、エラーがある場合はすべてのエラーをリストするセクションが表示されます。
Controller Action内でHttpContext.Responseにアクセスできます。そこで、次のリストのように応答ステータスを設定できます。
[HttpPost]
public ActionResult PostViaAjax()
{
var body = Request.BinaryRead(Request.TotalBytes);
var result = Content(JsonError(new Dictionary<string, string>()
{
{"err", "Some error!"}
}), "application/json; charset=utf-8");
HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
return result;
}
ビューの挿入で
@Html.ValidationMessage("Error")
モデルでnewを使用した後、コントローラーで
var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}