Подтвердить что ты не робот

Вернуть сообщение об ошибке с помощью actionResult

MVC App, клиент делает запрос на сервер, происходит ошибка, вы хотите отправить сообщение обратно клиенту. Пробовал 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);
    }
}
4b9b3361

Ответ 1

Один из подходов состоит в том, чтобы просто использовать ModelState:

ModelState.AddModelError("", "Error in cloud - GetPLUInfo" + ex.Message);

а затем в представлении сделайте что-то вроде этого:

@Html.ValidationSummary()

где вы хотите, чтобы ошибки отображались. Если ошибок нет, он не будет отображаться, но если есть, вы получите раздел, в котором перечислены все ошибки.

Ответ 2

Вам нужно вернуть представление, у которого есть дружественное сообщение об ошибке для пользователя

catch (Exception ex)
{
   // to do :log error
   return View("Error");
}

Вам не следует указывать внутреннюю информацию о вашем исключении (например, исключение stacktrace и т.д.) для пользователя. Вы должны регистрировать соответствующую информацию в своем журнале ошибок, чтобы вы могли пройти через нее и устранить проблему.

Если ваш запрос является 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 и т.д., чтобы показать ошибку пользователю в представленной форме.

Ответ 3

Внутри контроллера вы можете получить доступ к 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;
}

Ответ 4

В окне просмотра

@Html.ValidationMessage("Error")

затем в контроллере после использования нового в вашей модели

var model = new yourmodel();
try{
[...]
}catch(Exception ex){
ModelState.AddModelError("Error", ex.Message);
return View(model);
}