Beispiel #1
0
            public SelectClause Parse(ParameterExpression it)
            {
                var rootClause = new SelectClause
                {
                    // will have sub-clauses
                    SelectClauses = new Dictionary <PropertyInfo, SelectClause>()
                };

                _parser.PushThis(it);
                SelectItemList(rootClause);
                _parser.PopThis();
                return(rootClause);
            }
Beispiel #2
0
 public void Initialize(HttpContext httpContext, ILogger <OpenApiQueryOptions> logger, ModelStateDictionary modelStateDictionary)
 {
     if (httpContext.Request.Query.TryGetValue("$filter", out var values))
     {
         if (values.Count == 1)
         {
             RawValue = values[0];
             var binder = httpContext.RequestServices.GetRequiredService <IOpenApiTypeHandler>();
             var parser = new QueryExpressionParser(values[0], binder);
             try
             {
                 parser.PushThis(Parameter);
                 FilterClause = parser.CommonExpr();
                 parser.PopThis();
             }
             catch (Exception e)
             {
                 logger.LogError(e, "Failed to parse filter");
                 modelStateDictionary.TryAddModelException("$filter", e);
             }
         }
         else
         {
             modelStateDictionary.TryAddModelError("$filter", "Only one $filter can be specified per request");
         }
     }
 }
        public void Initialize(
            HttpContext httpContext,
            ILogger <OpenApiQueryOptions> logger,
            ModelStateDictionary modelState)
        {
            if (httpContext.Request.Query.TryGetValues(QueryOptionKeys.FilterKeys, out var values))
            {
                using var enumerator = values.GetEnumerator();
                if (enumerator.MoveNext())
                {
                    RawValue = enumerator.Current;
                    var binder = httpContext.RequestServices.GetRequiredService <IOpenApiTypeHandler>();
                    var parser = new QueryExpressionParser(enumerator.Current, binder);
                    try
                    {
                        parser.PushThis(Parameter);
                        FilterClause = parser.CommonExpr();
                        parser.PopThis();
                    }
                    catch (Exception e)
                    {
                        logger.LogError(e, "Failed to parse filter");
                        modelState.TryAddModelException(QueryOptionKeys.FilterKeys.First(), e);
                    }

                    if (enumerator.MoveNext())
                    {
                        modelState.TryAddModelError(QueryOptionKeys.FilterKeys.First(),
                                                    "Multiple filter clauses found, only one can be specified.");
                    }
                }
            }
        }
Beispiel #4
0
        private void TestParse_DateTimeOffset(string str, DateTimeOffset expected)
        {
            var parser = new QueryExpressionParser(str, new DefaultOpenApiTypeHandler());

            parser.PushThis(Expression.Constant(this));
            var expr = parser.CommonExpr();

            parser.PopThis();
            Assert.IsInstanceOfType(((ConstantExpression)expr).Value, typeof(DateTimeOffset));
            Assert.AreEqual(expected, (DateTimeOffset)((ConstantExpression)expr).Value);
        }
Beispiel #5
0
 internal void Initialize(QueryExpressionParser parser, ModelStateDictionary modelStateDictionary)
 {
     try
     {
         parser.PushThis(Parameter);
         FilterClause = parser.CommonExpr();
         parser.PopThis();
     }
     catch (Exception e)
     {
         modelStateDictionary.TryAddModelException("$filter", e);
     }
 }
Beispiel #6
0
 public void Parse(ParameterExpression it)
 {
     _parser.PushThis(it);
     ExpandItemList();
     _parser.PopThis();
 }