2014-02-10 3 views
22

MVC App, клиент делает запрос на сервер, происходит ошибка, вы хотите отправить сообщение обратно клиенту. Tried HttpStatusCodeResult, но возвращает 404 без сообщения, мне нужны подробности об ошибке, отправленной клиенту.return error message with actionResult

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

ответ

15

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

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

19

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

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

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

@Html.ValidationSummary() 

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

4

на ваш взгляд вставить

@Html.ValidationMessage("Error") 

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

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

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

Откуда вы взяли JsonError? –

+0

@EhsanZargarErshadi: Я думаю, что нашел: https://docs.microsoft.com/en-us/uwp/api/windows.data.json.jsonerror – Matt

+0

Спасибо за эту строку HttpContext.Response.StatusCode = (int) HttpStatusCode .BadRequest; –