Ejemplo n.º 1
0
        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));
        }