public static ActionResult Result(
            this ControllerBase controller,
            ResultBase result)
        {
            var context = new ControllerResultContext(controller, result);

            var options = controller
                          .HttpContext
                          .RequestServices
                          .GetRequiredService <IOptions <FluentResultOptions> >();

            var events = options.Value.ControllerEvents;

            var customReasons = result
                                .Reasons
                                .Where(r => r.GetType() != typeof(Success))
                                .Where(r => r.GetType() != typeof(Error));

            foreach (var reason in customReasons)
            {
                if (events.Handlers.ContainsKey(reason.GetType()))
                {
                    var handler = events.Handlers[reason.GetType()];
                    return(handler(context));
                }
            }

            if (result.IsSuccess)
            {
                return(options.Value.ControllerEvents.OnSuccess(context));
            }

            return(options.Value.ControllerEvents.OnFailed(context));
        }
예제 #2
0
        public static ActionResult Handle(ControllerResultContext context)
        {
            if (context.IsValueResult)
            {
                return(context.Controller.Ok(context.Value));
            }

            return(context.Controller.Ok());
        }
        public static ActionResult Handle(ControllerResultContext context)
        {
            var error = context
                        .Result
                        .Errors
                        .OfType <BadRequestError>()
                        .First();

            return(context.Controller.BadRequest(error.Error));
        }
예제 #4
0
        public static ActionResult Handle(ControllerResultContext context)
        {
            var error = context.Controller.ProblemDetailsFactory.CreateProblemDetails(
                context.Controller.HttpContext,
                statusCode: 400);

            error.Extensions["errors"] = context
                                         .Result
                                         .Errors
                                         .Select(e => e.Message);

            return(context.Controller.BadRequest(error));
        }
        public static ActionResult Handle(ControllerResultContext context)
        {
            var error = context
                        .Result
                        .Errors
                        .OfType <ProblemError>()
                        .First();

            return(context.Controller.Problem(
                       error.Detail,
                       error.Instance,
                       error.StatusCode,
                       error.Title,
                       error.Type));
        }
예제 #6
0
        public static ActionResult Handle(ControllerResultContext context)
        {
            var success = context
                          .Result
                          .Successes
                          .OfType <CreatedSuccess>()
                          .First();

            if (success.Location == null)
            {
                return(context.Controller.StatusCode(StatusCodes.Status201Created, context.Value));
            }

            return(context.Controller.Created(success.Location, context.Value));
        }
예제 #7
0
        public static ActionResult Handle(ControllerResultContext context)
        {
            var validationErrors = context
                                   .Result
                                   .Errors
                                   .OfType <ValidationProblemError>();

            foreach (var validationError in validationErrors)
            {
                context.Controller.ModelState.AddModelError(validationError.Key ?? string.Empty, validationError.Message);
            }

            var generalErrors = context
                                .Result
                                .Errors
                                .Where(r => r.GetType() == typeof(Error))
                                .Select(e => e.Message)
                                .Where(e => e is not null);

            string detail = string.Join(" ", generalErrors);

            return(context.Controller.ValidationProblem(detail: detail));
        }
 public static ActionResult Handle(ControllerResultContext context)
 {
     return(context.Controller.NotFound(context.Value));
 }
예제 #9
0
 public static ActionResult Handle(ControllerResultContext context)
 {
     return(context.Controller.Forbid());
 }