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);
}
}
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.
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.
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;
}
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);
}