Ejemplo n.º 1
0
        /// <inheritdoc />
        protected override void ConfigureMappings(HttpResponseExceptionConfiguration configuration)
        {
            configuration.AddMapping(
                HttpStatusCode.Unauthorized,
                (r, c) => new UnauthenticatedException(
                    c.Formatter.Code(r.Property("code")),
                    c.Formatter.Message(r.Property("message"))));

            configuration.AddMapping(
                HttpStatusCode.Forbidden,
                "AR403",
                (r, c) => new EntityPermissionException(
                    c.Formatter.Code(r.Property("code")),
                    userId: c.Formatter.EntityProperty(r.Property("userId")),
                    entityType: c.Formatter.EntityType(r.Property("resource")),
                    entityId: c.Formatter.EntityProperty(r.Property("resourceId"))));

            configuration.AddMapping(
                HttpStatusCode.Forbidden,
                "AR403C",
                (r, c) => new EntityCreatePermissionException(
                    c.Formatter.Code(r.Property("code")),
                    c.Formatter.EntityProperty(r.Property("userId")),
                    c.Formatter.EntityType(r.Property("resource")),
                    c.Formatter.EntityType(r.Property("resourceId"))));

            configuration.AddMapping(
                (HttpStatusCode)422,
                (r, c) =>
            {
                var errorsResponse = r.Property <List <ResourceValidationErrorApiModel> >("errors");
                var errors         = errorsResponse?.Select(e => new ValidationError(
                                                                resource: c.Formatter.EntityType(e.Resource),
                                                                field: c.Formatter.EntityProperty(e.Field),
                                                                code: ToValidationErrorCode(e.Code),
                                                                errorMessage: c.Formatter.Message(e.Message))) ?? Enumerable.Empty <ValidationError>();

                var errorDetails = new ValidationErrorDetails(c.Formatter.Message(r.Property("message")), errors);
                return(new EntityValidationException(
                           code: c.Formatter.Code(r.Property("code")),
                           errorDetails: errorDetails));
            });

            configuration.AddMapping(
                HttpStatusCode.NotFound,
                "AR404",
                (r, c) => new EntityNotFoundException(
                    c.Formatter.Code(r.Property("code")),
                    entityType: c.Formatter.EntityType(r.Property("resource")),
                    entityId: c.Formatter.EntityProperty(r.Property("resourceId"))));

            configuration.AddMapping(
                HttpStatusCode.NotFound,
                "AR404Q",
                (r, c) => new EntityNotFoundQueryException(
                    c.Formatter.Code(r.Property("code")),
                    c.Formatter.EntityType(r.Property("resource")),
                    r.Property <IEnumerable <QueryParameterDto> >("queryParameters").Select(qp => new QueryParameter(qp.Key, qp.Value))));

            configuration.AddMapping(
                HttpStatusCode.InternalServerError,
                (r, c) => new ServiceErrorException(
                    c.Formatter.Code(r.Property("code")),
                    new Exception(c.Formatter.Message(r.Property("message")))));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Configures the mappings.
 /// </summary>
 /// <param name="configuration">The configuration.</param>
 protected abstract void ConfigureMappings(
     HttpResponseExceptionConfiguration configuration);