MVC App,客户端向服务器发出请求,发生错误,想将msg发送回客户端。 尝试了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);
}
}
答案 0 :(得分:27)
您需要向用户返回一个包含友好错误消息的视图
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.ValidationSummary
等Html帮助程序方法,以他提交的形式向用户显示错误
答案 1 :(得分:20)
一种方法是使用ModelState
:
ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);
然后在视图上执行以下操作:
@Html.ValidationSummary()
您希望显示错误的位置。如果没有错误,它将不会显示,但如果有,你会得到一个列出所有错误的部分。
答案 2 :(得分:10)
Inside Controller Action您可以访问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;
}
答案 3 :(得分:5)
在您的视图中插入
@Html.ValidationMessage("Error")
然后在模型中使用new
后在控制器中var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}