Sie müssen selbst ein Stück Code hinzufügen, das Fehler behandelt und eine Nachricht zurückgibt.
Eine Option besteht darin, einen Ausnahmefilter zu verwenden und ihn entweder global oder auf ausgewählten Controllern hinzuzufügen, obwohl dieser Ansatz nur Ausnahmen abdecken würde, die von den Controller-Aktionsmethoden kommen. Zum Beispiel werden die folgenden Filter ein Json-Objekt zurück nur, wenn die Anforderung akzeptieren war application/json (Sonst wäre es die Ausnahme passieren lassen, durch die beispielsweise durch die globale Fehlerseite behandelt werden könnte):
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());
});
Eine weitere Option Sie können die Signatur ändern, um flexibler zu reagieren. Dann können Sie den Fehler so behandeln, wie normalerweise, und dann eine benutzerfreundliche Fehlermeldung zurückgeben.
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);
}
}
Werfen Sie einen Blick auf den Antworten auf [dieser] (http://stackoverflow.com/q/31054012/5233410) Frage – Nkosi