private async Task BindFromUri(ModelMetadataProvider metadataProvider, HttpActionContext actionContext,
                                       CancellationToken cancellationToken)
        {
            var uriBinding = _descriptor.BindWithAttribute(new FromUriAttribute());
            await uriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);

            var bindedValue = GetValue(actionContext) as IClientQuery;
            var query       = GetValue(actionContext) as IClientQuery ??
                              Activator.CreateInstance(_descriptor.ParameterType) as IClientQuery;

            if (bindedValue == null)
            {
                SetValue(actionContext, query);
            }
            var clientFilterable = query as IClientFilterable;
            var clientSortable   = query as IClientSortable;
            var clientPageable   = query as IClientPageable;
            var queryString      = actionContext.Request.GetQueryNameValuePairs()
                                   .Where(x => Keys.KnownKeys.Contains(x.Key))
                                   .ToDictionary(x => x.Key, x => (object)x.Value);
            var routeDataValues = actionContext.Request.GetRouteData()
                                  .Values
                                  .Where(x => Keys.KnownKeys.Contains(x.Key));
            var requestValues = queryString.Union(routeDataValues).ToDictionary(x => x.Key, x => x.Value);

            if (queryString.ContainsKey(Keys.Filter) && clientFilterable != null)
            {
                var converter = new QueryStringFilterConverter();
                var filter    = (IFilter)converter.ConvertFrom(queryString[Keys.Filter]);
                clientFilterable.ClientFilter = filter ?? new AlwaysTrueFilter();
            }
            if (queryString.ContainsKey(Keys.Sort) && clientSortable != null)
            {
                var converter = new SortTypeConverter();
                var sort      = (ISort)converter.ConvertFrom(queryString[Keys.Sort]);
                clientSortable.ClientSort = sort ?? clientSortable.ClientSort ?? new RandomSort();
            }
            if ((queryString.ContainsKey(Keys.PageNumber) || queryString.ContainsKey(Keys.PageSize)) && clientPageable != null)
            {
                int pageNumber = 1, pageSize = 10;
                var hasNumber = requestValues.ContainsKey(Keys.PageNumber) && int.TryParse(requestValues[Keys.PageNumber].ToString(), out pageNumber);
                var hasSize   = requestValues.ContainsKey(Keys.PageSize) && int.TryParse(requestValues[Keys.PageSize].ToString(), out pageSize);
                var page      = new ClientPage
                {
                    PageNumber = hasNumber ? (int?)pageNumber : null,
                    PageSize   = hasSize ? (int?)pageSize : null
                };
                clientPageable.ClientPage = page;
            }
        }
Example #2
0
        public void Can_Deserialize_And_Execute_Filter_From_Query_String()
        {
            var filterTxt = File.ReadAllText("Files/filter.txt");
            var converter = new QueryStringFilterConverter();
            var filter = (IFilter)converter.ConvertFrom(HttpUtility.UrlDecode(filterTxt));

            Assert.IsNotNull(filter);
            Assert.IsInstanceOfType(filter, typeof(DynamicLinqFilter));

            var expected = Logs.Where(
                x => x.TimestampUtc > new DateTime(2014, 9, 1) &&
                    x.TimestampUtc < new DateTime(2014, 9, 30) &&
                    new string[] { "Error", "Warning" }.Contains(x.Level) &&
                    x.Type == null
                ).ToList();
            var actual = Logs.AsQueryable().Where(filter.ToExpression<LogEntry>()).ToList();
            Assert.IsTrue(expected.SequenceEqual(actual));
        }
Example #3
0
        public void Can_Deserialize_And_Execute_Filter_From_Query_String()
        {
            var filterTxt = File.ReadAllText("Files/filter.txt");
            var converter = new QueryStringFilterConverter();
            var filter    = (IFilter)converter.ConvertFrom(HttpUtility.UrlDecode(filterTxt));

            Assert.IsNotNull(filter);
            Assert.IsInstanceOfType(filter, typeof(DynamicLinqFilter));

            var expected = Logs.Where(
                x => x.TimestampUtc > new DateTime(2014, 9, 1) &&
                x.TimestampUtc < new DateTime(2014, 9, 30) &&
                new string[] { "Error", "Warning" }.Contains(x.Level) &&
                x.Type == null
                ).ToList();
            var actual = Logs.AsQueryable().Where(filter.ToExpression <LogEntry>()).ToList();

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
 private async Task BindFromUri(ModelMetadataProvider metadataProvider, HttpActionContext actionContext,
     CancellationToken cancellationToken)
 {
     var uriBinding = _descriptor.BindWithAttribute(new FromUriAttribute());
     await uriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);
     var bindedValue = GetValue(actionContext) as IClientQuery;
     var query = GetValue(actionContext) as IClientQuery ??
                 Activator.CreateInstance(_descriptor.ParameterType) as IClientQuery;
     if (bindedValue == null)
     {
         SetValue(actionContext, query);
     }
     var clientFilterable = query as IClientFilterable;
     var clientSortable = query as IClientSortable;
     var clientPageable = query as IClientPageable;
     var queryString = actionContext.Request.GetQueryNameValuePairs()
         .Where(x => Keys.KnownKeys.Contains(x.Key))
         .ToDictionary(x => x.Key, x => (object)x.Value);
     var routeDataValues = actionContext.Request.GetRouteData()
         .Values
         .Where(x => Keys.KnownKeys.Contains(x.Key));
     var requestValues = queryString.Union(routeDataValues).ToDictionary(x => x.Key, x => x.Value);
     if (queryString.ContainsKey(Keys.Filter) && clientFilterable != null)
     {
         var converter = new QueryStringFilterConverter();
         var filter = (IFilter)converter.ConvertFrom(queryString[Keys.Filter]);
         clientFilterable.ClientFilter = filter ?? new AlwaysTrueFilter();
     }
     if (queryString.ContainsKey(Keys.Sort) && clientSortable != null)
     {
         var converter = new SortTypeConverter();
         var sort = (ISort)converter.ConvertFrom(queryString[Keys.Sort]);
         clientSortable.ClientSort = sort ?? clientSortable.ClientSort ?? new RandomSort();
     }
     if ((queryString.ContainsKey(Keys.PageNumber) || queryString.ContainsKey(Keys.PageSize)) && clientPageable != null)
     {
         int pageNumber = 1, pageSize = 10;
         var hasNumber = requestValues.ContainsKey(Keys.PageNumber) && int.TryParse(requestValues[Keys.PageNumber].ToString(), out pageNumber);
         var hasSize = requestValues.ContainsKey(Keys.PageSize) && int.TryParse(requestValues[Keys.PageSize].ToString(), out pageSize);
         var page = new ClientPage
         {
             PageNumber = hasNumber ? (int?)pageNumber : null,
             PageSize = hasSize ? (int?)pageSize : null
         };
         clientPageable.ClientPage = page;
     }
 }