Beispiel #1
0
        /// <summary>
        /// Execute on each request
        /// Convert Json Object in request body to the expected type in the controller action
        /// </summary>
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (AttributeHandling.IsIgnoreJsonApi(((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo, Constants.WAY_READER))
            {
                return;
            }

            string parameter_name = context.ActionDescriptor.GetParameterNameJsonApi();
            object obj            = context.ActionArguments.FirstOrDefault(i => i.Key == parameter_name).Value;

            if (obj != null)
            {
                try
                {
                    JsonApiService service = context.HttpContext.RequestServices.GetRequiredService <JsonApiService>();

                    JsonApiReader jsonReader = new JsonApiReader(new StreamReader(context.HttpContext.Request.Body).ReadToEnd(), obj);
                    jsonReader.SetResolver(new ResolverData(context.HttpContext.RequestServices, service.Resolvers));
                    jsonReader.SetConstraintId(context.ActionArguments.FirstOrDefault(i => i.Key == context.ActionDescriptor.GetParameterNameIdArgument()).Value, context.HttpContext.Request.Method);

                    context.ActionArguments[parameter_name] = jsonReader.GetModel();
                }
                catch (JsonApiException ex)
                {
                    context.HttpContext.Response.StatusCode = Constants.ERROR_STATUT_JSONAPI;
                    context.Result = new ObjectResult(ex.Error.GetJsonErrors());
                }
            }

            base.OnActionExecuting(context);
        }
Beispiel #2
0
        /// <summary>
        /// Lis la query string, décode les parametres json
        /// </summary>
        /// <param name="httpContextAccessor">Context http</param>
        public QueryService(IHttpContextAccessor httpContextAccessor, JsonApiService jsonapi)
        {
            this._jsonapi = jsonapi;
            this._query   = httpContextAccessor.HttpContext.Request.Query;

            this._jFilter    = this.ParseQuery(FILTER);
            this._jPage      = this.ParseQuery(PAGE);
            this._jSort      = this.ParseQuery(SORT);
            this._jSelection = this.ParseQuery(SELECTION);
            this._jParameter = this.ParseQuery(PARAMETER);
            this._includes   = Utils.FormatQueryToInclude(this._query[INCLUDE]);
            this._fields     = Utils.FormatQueryToFields(this._query.Where(m => m.Key.Contains(FIELDS)));
        }
Beispiel #3
0
        /// <summary>
        /// Execute after each action
        /// Convert return type to jsonAPI format
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            if (AttributeHandling.IsIgnoreJsonApi(((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo, Constants.WAY_PARSER))
            {
                return;
            }

            JsonApiService service = context.HttpContext.RequestServices.GetRequiredService <JsonApiService>();

            if (service.Error != null && service.Error.HasErrors())
            {
                context.HttpContext.Response.StatusCode = Constants.ERROR_STATUT_JSONAPI;
                context.Result = new ObjectResult(service.Error.GetJsonErrors());

                return;
            }

            if (context.Result is ObjectResult)
            {
                object result = ((ObjectResult)context.Result).Value;

                //If result is already JObject, return it without transform
                if (result?.GetType() == typeof(Newtonsoft.Json.Linq.JObject))
                {
                    return;
                }

                //Transform result to JsonAPI format
                JsonApiParser jsonAPIParser = service.Parser;
                jsonAPIParser.SetResolver(new ResolverData(context.HttpContext.RequestServices, service.Resolvers));
                jsonAPIParser.SetModel(result);
                jsonAPIParser.SetOptionsWithQuery(context.HttpContext.Request.Query);

                ((ObjectResult)context.Result).Value = jsonAPIParser.GetJson();
            }

            base.OnActionExecuted(context);
        }
Beispiel #4
0
 public QueryServiceArchitecture(IHttpContextAccessor httpContextAccessor, JsonApiService jsonapi) : base(httpContextAccessor, jsonapi)
 {
 }