public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { if (!context.ModelState.IsValid) { var ErrorsInModelState = context.ModelState.Where(x => x.Value.Errors.Count > 0) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value.Errors.Select(x => x.ErrorMessage)).ToArray(); var ErrorMessages = new List <IErrorMessage>(); foreach (var error in ErrorsInModelState) { foreach (var subError in error.Value) { var AErrorMessage = new ErrorMessageDto { FieldName = error.Key, Message = subError, StatusCode = "400" }; ErrorMessages.Add(AErrorMessage); } } context.Result = new BadRequestObjectResult(ErrorMessages); return; } await next(); }
/// <summary> /// Добавить обработку исключений /// </summary> public static IApplicationBuilder AddExceptionHandling(this IApplicationBuilder app) { app.UseExceptionHandler(applicationBuilder => { applicationBuilder.Run(async httpContext => { var exception = httpContext.Features.Get <IExceptionHandlerPathFeature>()?.Error ?? new UnknownException(); var exceptionDto = new ErrorMessageDto { ErrorMessage = exception.Message }; var exceptionJson = exceptionDto.ToJson(); var logger = applicationBuilder.ApplicationServices.GetService <IStarsLogger>(); logger.Write(exception); httpContext.Response.ContentType = MediaTypeNames.Application.Json; httpContext.Response.StatusCode = exception is BusinessException ? StatusCodes.Status400BadRequest : StatusCodes.Status500InternalServerError; await httpContext.Response.WriteAsync(exceptionJson); }); }); return(app); }
/// <summary> /// Load a http response into dto /// </summary> /// <param name="resp">Response with brute data and code error</param> public void Load(ApiResponse resp) { if (resp.ReturnCode != ApiRequestCode.OK) { this.ErrorMessage = JsonConvert.DeserializeObject <ErrorMessageDto>(resp.Response); } else { this.parseJson(resp.Response); } }
public override Task OnExceptionAsync(ExceptionContext context) { if (context.Exception is IHttpStatusCodeException) { var message = new ErrorMessageDto(context.Exception.Message); context.Result = new ObjectResult(message) { StatusCode = (context.Exception as IHttpStatusCodeException).HttpStatusCode }; context.ExceptionHandled = true; } return(Task.CompletedTask); }