使用actionResult返回错误消息

时间:2014-02-10 16:26:53

标签: c# asp.net-mvc asp.net-mvc-3 actionresult

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

4 个答案:

答案 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);
}