net mvc mostrar mensajes from error asp c# asp.net-mvc asp.net-mvc-3 actionresult

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.