Вам нужно будет добавить код, который будет обрабатывать ошибки и возвращать сообщение.
Один из вариантов - использовать фильтр исключений и добавить его либо глобально, либо выбранные контроллеры, хотя этот подход будет охватывать исключения, исходящие из методов действий контроллера. Например, следующий фильтр будет возвращать объект JSON только тогда, когда запрос принимает было применение/JSON (В противном случае это позволило бы исключению пройти через которые, например, могут быть обработаны с помощью глобальной страницы ошибок):
public class CustomJSONExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
if (context.HttpContext.Request.GetTypedHeaders().Accept.Any(header => header.MediaType == "application/json"))
{
var jsonResult = new JsonResult(new { error = context.Exception.Message });
jsonResult.StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError;
context.Result = jsonResult;
}
}
}
services.AddMvc(opts =>
{
//Here it is being added globally.
//Could be used as attribute on selected controllers instead
opts.Filters.Add(new CustomJSONExceptionFilter());
});
Другого варианта Вы можете изменить подпись, чтобы сделать ответ более гибким. Затем вы можете обрабатывать ошибку, как обычно, и затем возвращать удобное сообщение об ошибке.
public IActionResult Get() {
try {
IEnumerable<MyEntity> result;
//...result populated
return new HttpOkObjectResult(result);
} catch (Exception ex) {
//You should handle the error
HandleError(ex);//the is not an actual method. Create your own.
//You could then create your own error so as not to leak
//internal information.
var error = new
{
message = "Enter you user friendly error message",
status = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError
};
Context.Response.StatusCode = error.status;
return new ObjectResult(error);
}
}
Посмотрите ответы на [эту] (http://stackoverflow.com/q/31054012/5233410) Вопрос – Nkosi