MVC应用程序,客户端向服务器发出请求,发生错误,想要将消息发送回客户端。 尝试了 HttpStatusCodeResult 但只返回 404,没有消息,我需要发送回客户端的错误详细信息。
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);
}
}
您需要返回一个向用户提供友好错误消息的视图
catch (Exception ex)
{
// to do :log error
return View("Error");
}
您不应该向用户显示异常的内部详细信息(例如异常堆栈跟踪等)。您应该将相关信息记录到错误日志中,以便您可以查看它并解决问题。
如果您的请求是 ajax 请求,您可以返回带有适当状态标志的 JSON 响应,客户端可以评估该状态标志并执行进一步操作
[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"});
}
}
如果您想在用户提交的表单中显示错误,您可以使用
ModelState.AddModelError
方法以及 Html 帮助器方法(如 Html.ValidationSummary
等)在用户提交的表单中向用户显示错误。
一种方法是仅使用
ModelState
:
ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);
然后在视图上执行如下操作:
@Html.ValidationSummary()
您想要显示错误的位置。如果没有错误,则不会显示,但如果有错误,您将看到一个列出所有错误的部分。
在控制器操作内部,您可以访问 HttpContext.Response。您可以在此处设置响应状态,如下列表所示。
[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;
}
在您的视图中插入
@Html.ValidationMessage("Error")
然后在模型中使用 new 之后在控制器中
var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}
不确定这是否适用于所有人,但我遇到了类似的问题,在我的视图中,我将结果返回到 AJAX 调用,并且我希望显示自定义错误消息,本文为我完美解决了这个问题(ASP.NET MVC 5 ajax 错误状态文本始终为“错误”)。 太长了。
Response.TrySkipIisCustomErrors = true; Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.ContentType = "text/plain"; return Content("Error" + Environment.NewLine + ex.Message);
当客户端可以配置为处理异常时。
IActionResult GetData(string id)
{
try
{
// code
}
catch (Exception ex)
{
throw new Exception("<CustomMessage>", ex);
}
}
当客户端只需要一个响应字符串时。
IActionResult GetData(string id)
{
try
{
// code
}
catch (Exception ex)
{
return "<ERCODE>:"+ex.Message;
}
}