retourner le message d'erreur avec actionResult

MVC Application, le client fait une requête au serveur, une erreur se produit, vous voulez envoyer le msg au client. Essayé HttpStatusCodeResult mais renvoie simplement un 404 sans message, j'ai besoin des détails de l'erreur renvoyée au client.

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);
    }
}
25
demandé sur MikeSmithDev 2014-02-10 20:26:53

4 réponses

vous devez retourner une vue qui a un message d'erreur convivial à l'utilisateur

catch (Exception ex)
{
   // to do :log error
   return View("Error");
}

vous ne devriez pas montrer les détails internes de votre exception(comme le stacktrace d'exception etc) à l'utilisateur. Vous devez enregistrer les informations pertinentes dans votre journal des erreurs afin de pouvoir les parcourir et corriger le problème.

si votre requête est une requête ajax, vous pouvez retourner une réponse JSON avec un indicateur d'état approprié que le client peut évaluer et faire plus actions

[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 vous souhaitez afficher l'erreur dans le formulaire envoyé par l'utilisateur, Vous pouvez utiliser ModelState.AddModelError méthode avec les méthodes d'aide Html comme Html.ValidationSummary etc pour montrer l'erreur de l'utilisateur dans le formulaire qu'il a soumis.

22
répondu Shyju 2016-11-13 13:49:09

une approche serait de simplement utiliser le ModelState:

ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);

puis dans la vue de faire quelque chose comme ceci:

@Html.ValidationSummary()

où vous voulez que les erreurs s'affichent. S'il n'y a pas d'erreurs, il ne s'affichera pas, mais s'il y en a, vous obtiendrez une section qui liste toutes les erreurs.

20
répondu Mike Perrenoud 2014-02-10 16:30:10

Action du contrôleur intérieur vous pouvez accéder à HttpContext.Réponse. Là, vous pouvez définir l'état de la réponse comme dans la liste suivante.

[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;
}
7
répondu Alexey Matveev 2016-06-06 07:54:52

dans votre vue insérez

@Html.ValidationMessage("Error")

puis dans le controller après avoir utilisé new dans votre model

var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}
4
répondu theLaw 2014-02-10 16:32:14