public async Task Invoke(HttpContext httpContext) { var ex = httpContext.Features.Get <IExceptionHandlerFeature>()?.Error; if (ex == null) { return; } httpContext.Response.Clear(); httpContext.Response.ContentType = @"application/json"; GlobalException exception; if (ex is GlobalException) { exception = (GlobalException)ex; } else { exception = new GlobalException(ex.Message); } httpContext.Response.StatusCode = (int)exception.Status; using (var writer = new StreamWriter(httpContext.Response.Body)) { var resp = new ErrorResp(exception.Message); new JsonSerializer().Serialize(writer, resp); await writer.FlushAsync().ConfigureAwait(false); } }
private static Task HandleExceptionAsync(HttpContext context, Exception ex, IHostingEnvironment hostingEnvironment) { var errorResp = new ErrorResp(); var msg = "Internal Server Error"; var code = HttpStatusCode.InternalServerError; // 500 if unexpected if (hostingEnvironment.IsDevelopment()) { msg = ex.Message; } if (ex is ArgumentException) { code = HttpStatusCode.BadRequest; msg = ex.Message; } //else if (ex is MyUnauthorizedException) code = HttpStatusCode.Unauthorized; //else if (ex is MyException) code = HttpStatusCode.BadRequest; errorResp.SetHttpCode(code); errorResp.AddErrors(msg); var result = JsonConvert.SerializeObject(errorResp); context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)code; return(context.Response.WriteAsync(result)); }