MVC App, le client fait une demande au serveur, une erreur se produit, veut renvoyer le message au client. Essayé HttpStatusCodeResult mais retourne juste un 404 sans message, j'ai besoin des détails de l'erreur renvoyés 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);
}
}
Vous devez renvoyer une vue contenant 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 une pile d'exceptions, etc.) à l'utilisateur. Vous devriez consigner les informations pertinentes dans votre journal des erreurs afin de pouvoir les consulter et résoudre le problème.
Si votre demande est une demande ajax, vous pouvez renvoyer une réponse JSON avec un indicateur d'état approprié que le client peut évaluer et effectuer d'autres 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 que l'utilisateur a soumis, vous pouvez utiliser ModelState.AddModelError
méthode avec les méthodes d’aide HTML telles que Html.ValidationSummary
etc pour montrer l'erreur à l'utilisateur dans le formulaire qu'il a soumis.
Une approche serait d’utiliser simplement le ModelState
:
ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);
et puis sur la vue faire quelque chose comme ça:
@Html.ValidationSummary()
où vous voulez que les erreurs s'affichent. S'il n'y a pas d'erreur, il ne s'affichera pas, mais s'il y en a une section qui répertorie toutes les erreurs.
Dans Action du contrôleur, vous pouvez accéder à HttpContext.Response. Là, vous pouvez définir le statut de la réponse comme indiqué 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 ta vue insérer
@Html.ValidationMessage("Error")
puis dans le contrôleur après l'utilisation de nouveau dans votre modèle
var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}