c# - mvc - devuelve el mensaje de error con actionResult
mostrar mensajes de error en mvc (4)
MVC App, el cliente realiza una solicitud al servidor, ocurre un error, desea enviar el mensaje de vuelta al cliente. Intenté HttpStatusCodeResult pero solo devuelve un 404 sin mensaje, necesito los detalles del error enviado al cliente.
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);
}
}
Debe devolver una vista que tenga un mensaje de error amigable para el usuario
catch (Exception ex)
{
// to do :log error
return View("Error");
}
No debe mostrar los detalles internos de su excepción (como excepción stacktrace, etc.) al usuario. Debería estar registrando la información relevante en su registro de errores para que pueda revisarlo y solucionar el problema.
Si su solicitud es una solicitud ajax, puede devolver una respuesta JSON con un indicador de estado adecuado que el cliente puede evaluar y realizar otras acciones
[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"});
}
}
Si desea mostrar el error en el formulario enviado por el usuario, puede usar el método ModelState.AddModelError
junto con los métodos de ayuda Html como Html.ValidationSummary
etc., para mostrar el error al usuario en el formulario que envió.
Dentro de Controller Action puedes acceder a HttpContext.Response. Allí puede establecer el estado de respuesta como en la lista siguiente.
[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;
}
En tu vista insertar
@Html.ValidationMessage("Error")
luego en el controlador después de usar nuevo en su modelo
var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}
Un enfoque sería usar el ModelState
:
ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);
y luego en la vista hacer algo como esto:
@Html.ValidationSummary()
donde quieres que se muestren los errores. Si no hay errores, no se mostrará, pero si los hay, aparecerá una sección que enumera todos los errores.