public PagedSearchedQueryResult <Kontrahent> Kontrahenci(int idFirmy, int page, string search, string asc, string desc, int pageSize = KancelariaSettings.PageSize)
        {
            //var result = (from k in db.Kontrahents
            //        select k).AsQueryable();

            //return new PagedSearchedQueryResult<Kontrahent>(result, page, KancelariaSettings.PageSize);

            if (search == null)
            {
                search = "";
            }

            var Query = QueryStringParser <Kontrahent> .Parse(
                (from k in db.Kontrahents where k.IdFirmy == idFirmy select k).SortBy(asc, desc, "KodKontrahenta"), new KontrahenciDictionary(), ref search
                ).Where(
                q => q.KodKontrahenta.ToLower().Contains(search.ToLower()) ||
                q.Miejscowosc.ToLower().Contains(search.ToLower()) ||
                q.NazwaKontrahenta.ToLower().Contains(search.ToLower()) ||
                q.NIP.ToLower().Contains(search.ToLower()) ||
                q.Panstwo.ToLower().Contains(search.ToLower()) ||
                q.Ulica.ToLower().Contains(search.ToLower())
                );

            return(new PagedSearchedQueryResult <Kontrahent>(Query, page, pageSize, search));
        }
示例#2
0
        protected override async Task <bool> PostHtmlAsync(IOwinEnvironment context, IClient client, ContentType bodyContentType, CancellationToken cancellationToken)
        {
            var application = await client.GetApplicationAsync(_configuration.Application.Href, cancellationToken);

            try
            {
                var body = await context.Request.GetBodyAsStringAsync(cancellationToken);

                var model    = PostBodyParser.ToModel <ForgotPasswordPostModel>(body, bodyContentType, _logger);
                var formData = FormContentParser.Parse(body, _logger);

                var stateToken       = formData.GetString(StringConstants.StateTokenName);
                var parsedStateToken = new StateTokenParser(client, _configuration.Client.ApiKey, stateToken, _logger);
                if (!parsedStateToken.Valid)
                {
                    var queryString      = QueryStringParser.Parse(context.Request.QueryString, _logger);
                    var viewModelBuilder = new ForgotPasswordFormViewModelBuilder(client, _configuration, queryString);
                    var viewModel        = viewModelBuilder.Build();
                    viewModel.Errors.Add("An error occurred. Please try again.");

                    await RenderViewAsync(context, _configuration.Web.ForgotPassword.View, viewModel, cancellationToken);

                    return(true);
                }

                await application.SendPasswordResetEmailAsync(model.Email, cancellationToken);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, source: "ForgotRoute.PostHtml");
            }

            return(await HttpResponse.Redirect(context, _configuration.Web.ForgotPassword.NextUri));
        }
        public PagedSearchedQueryResult <NieuregulowanaFakturaSprzedazy> NieuregulowaneFakturySprzedazy(int idFirmy, int idRoku, int?idKontrahenta, int?idInwestycji,
                                                                                                        int page, string search, string asc, string desc, int pageSize = KancelariaSettings.PageSize, bool czyRazemZKorektami = false, DateTime?stanNaDzien = null)
        {
            var Query = QueryStringParser <NieuregulowanaFakturaSprzedazy> .Parse(
                (from fz in db.NieuregulowanaFakturaSprzedazies
                 where fz.IdFirmy == idFirmy &&
                 fz.IdRoku == idRoku &&
                 (idKontrahenta.HasValue ? fz.IdKontrahenta == idKontrahenta : true) &&
                 (idInwestycji.HasValue ? fz.IdInwestycji == idInwestycji : true) &&
                 fz.KwotaNieuregulowana != 0 &&
                 (czyRazemZKorektami ? true : !fz.IdFakturyKorygujacej.HasValue)
                 select fz).SortBy(asc, desc, "DataFaktury"), new NieuregulowanaFakturySprzedazyDictionary(), ref search
                );

            if (search != null)
            {
                Query = Query.Where(
                    q => q.NumerFaktury.Contains(search.ToLower()) ||
                    q.Opis.Contains(search.ToLower()) ||
                    q.NumerFaktury.Contains(search.ToLower())
                    );
            }

            if (stanNaDzien.HasValue)
            {
                Query = Query.Where(p => p.TerminPlatnosci <= stanNaDzien.Value);
            }

            if (idKontrahenta.HasValue)
            {
                Query = Query.Where(q => q.IdKontrahenta == idKontrahenta);
            }

            return(new PagedSearchedQueryResult <NieuregulowanaFakturaSprzedazy>(Query, page, pageSize, search));
        }
示例#4
0
        protected override async Task <bool> GetHtmlAsync(IOwinEnvironment context, IClient client, CancellationToken cancellationToken)
        {
            var queryString = QueryStringParser.Parse(context.Request.QueryString, _logger);
            var spToken     = queryString.GetString("sptoken");

            if (string.IsNullOrEmpty(spToken))
            {
                var viewModelBuilder = new VerifyEmailFormViewModelBuilder(client, _configuration);
                var verifyViewModel  = viewModelBuilder.Build();

                await RenderViewAsync(context, _configuration.Web.VerifyEmail.View, verifyViewModel, cancellationToken);

                return(true);
            }

            try
            {
                var account = await client.VerifyAccountEmailAsync(spToken, cancellationToken);

                var postVerifyEmailContext = new PostVerifyEmailContext(context, account);
                await _handlers.PostVerifyEmailHandler(postVerifyEmailContext, cancellationToken);

                return(await HttpResponse.Redirect(context, $"{_configuration.Web.VerifyEmail.NextUri}"));
            }
            catch (ResourceException)
            {
                var viewModelBuilder = new VerifyEmailFormViewModelBuilder(client, _configuration);
                var verifyViewModel  = viewModelBuilder.Build();
                verifyViewModel.InvalidSpToken = true;

                await RenderViewAsync(context, _configuration.Web.VerifyEmail.View, verifyViewModel, cancellationToken);

                return(true);
            }
        }
        public PagedSearchedQueryResult <FakturaZakupu> FakturyZakupu(int idFirmy, int idRoku, int?idKontrahenta, int page, string search, string asc, string desc, int pageSize = KancelariaSettings.PageSize, DateTime?dateFrom = null, DateTime?dateTo = null)
        {
            var Query = QueryStringParser <FakturaZakupu> .Parse(
                (from fz in db.FakturaZakupus
                 where fz.IdFirmy == idFirmy &&
                 fz.IdRoku == idRoku &&
                 (idKontrahenta.HasValue ? fz.IdKontrahenta == idKontrahenta : true)
                 select fz).SortBy(asc, desc, "DataFaktury", true), new FakturyZakupuDictionary(), ref search
                );

            if (dateFrom.HasValue)
            {
                Query = Query.Where(p => p.DataFaktury >= dateFrom.Value);
            }

            if (dateTo.HasValue)
            {
                Query = Query.Where(p => p.DataFaktury <= dateTo.Value);
            }

            if (search != null)
            {
                Query = Query.Where(
                    q => q.NumerFaktury.Contains(search.ToLower()) ||
                    q.Opis.Contains(search.ToLower()) ||
                    q.WlasnyNumerFaktury.Contains(search.ToLower())
                    //|| q.PozycjaFakturyZakupus.Sum(s => s.KwotaNetto).ToString().Contains(search) // TODO: dorobic na FZ - FS metody zwracajace sumy netto, brutto, vat
                    );
            }

            return(new PagedSearchedQueryResult <FakturaZakupu>(Query, page, pageSize, search));
        }
示例#6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RequestMessage"/> class.
        /// </summary>
        /// <param name="urlDetails">The original url details.</param>
        /// <param name="method">The HTTP method.</param>
        /// <param name="clientIP">The client IP Address.</param>
        /// <param name="bodyData">The BodyData.</param>
        /// <param name="headers">The headers.</param>
        /// <param name="cookies">The cookies.</param>
        public RequestMessage([NotNull] UrlDetails urlDetails, [NotNull] string method, [NotNull] string clientIP, [CanBeNull] BodyData bodyData = null, [CanBeNull] IDictionary <string, string[]> headers = null, [CanBeNull] IDictionary <string, string> cookies = null)
        {
            Check.NotNull(urlDetails, nameof(urlDetails));
            Check.NotNull(method, nameof(method));
            Check.NotNull(clientIP, nameof(clientIP));

            AbsoluteUrl = urlDetails.AbsoluteUrl.ToString();
            Url         = urlDetails.Url.ToString();
            Protocol    = urlDetails.Url.Scheme;
            Host        = urlDetails.Url.Host;
            Port        = urlDetails.Url.Port;
            Origin      = $"{Protocol}://{Host}:{Port}";

            AbsolutePath         = WebUtility.UrlDecode(urlDetails.AbsoluteUrl.AbsolutePath);
            Path                 = WebUtility.UrlDecode(urlDetails.Url.AbsolutePath);
            PathSegments         = Path.Split('/').Skip(1).ToArray();
            AbsolutePathSegments = AbsolutePath.Split('/').Skip(1).ToArray();

            Method   = method;
            ClientIP = clientIP;

            BodyData = bodyData;

            // Convenience getters for e.g. Handlebars
            Body             = BodyData?.BodyAsString;
            BodyAsJson       = BodyData?.BodyAsJson;
            BodyAsBytes      = BodyData?.BodyAsBytes;
            DetectedBodyType = BodyData?.DetectedBodyType.ToString();
            DetectedBodyTypeFromContentType = BodyData?.DetectedBodyTypeFromContentType.ToString();

            Headers  = headers?.ToDictionary(header => header.Key, header => new WireMockList <string>(header.Value));
            Cookies  = cookies;
            RawQuery = WebUtility.UrlDecode(urlDetails.Url.Query);
            Query    = QueryStringParser.Parse(RawQuery);
        }
示例#7
0
        public void ThreeSimpleEqualFilters()
        {
            // Arrange
            string            query  = "Name eq 'Microsoft' and Industry eq 'Computer Software' or Headquarters eq 'Redmond, WA'";
            QueryStringParser parser = null;

            // Act
            var info = GetQueryInformation(query, CompaniesContext, out parser);

            // Assert
            Assert.IsTrue(info.FilterParameters.Exists(p => p.FieldName == "Name"), "The field collection doesn't contain an element with Field Name 'Name'.");
            var parameter = info.FilterParameters.Find(p => p.FieldName == "Name");

            Assert.AreEqual <string>("Microsoft", parameter.StringValue, "The value of the parameter is not the one expected.");
            Assert.AreEqual <FilteringOperator>(FilteringOperator.Equal, parameter.FilteringOperator, "The filtering operator is not the expected.");

            Assert.IsTrue(info.FilterParameters.Exists(p => p.FieldName == "Industry"), "The field collection doesn't contain an element with Field Name 'Industry'.");
            var parameter2 = info.FilterParameters.Find(p => p.FieldName == "Industry");

            Assert.AreEqual <string>("Computer Software", parameter2.StringValue, "The value of the parameter is not the one expected.");
            Assert.AreEqual <FilteringOperator>(FilteringOperator.Equal, parameter2.FilteringOperator, "The filtering operator is not the expected.");

            Assert.IsTrue(info.FilterParameters.Exists(p => p.FieldName == "Headquarters"), "The field collection doesn't contain an element with Field Name 'Headquarters'.");
            var parameter3 = info.FilterParameters.Find(p => p.FieldName == "Headquarters");

            Assert.AreEqual <string>("Redmond, WA", parameter3.StringValue, "The value of the parameter is not the one expected.");
            Assert.AreEqual <FilteringOperator>(FilteringOperator.Equal, parameter3.FilteringOperator, "The filtering operator is not the expected.");

            AssertNoWarningsOrExceptions(parser);
        }
        public void FromQueryString()
        {
#if NETSTANDARD
            var queryString = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery("q=test&options=o1&options=o2&numbers=1&numbers=5&doubles=99.99&doubles=8&lat=-53.3&lng=3.234&location=1,2&sortdir=Asc&enumOptions=optionone");
#else
            var queryString = System.Web.HttpUtility.ParseQueryString("q=test&options=o1&options=o2&numbers=1&numbers=5&doubles=99.99&doubles=8&lat=-53.3&lng=3.234&location=1,2&sortdir=Asc&enumOptions=optionone");
#endif
            var p = new MyParameters();

            QueryStringParser <MyParameters> .Populate(queryString, p);

            p.Query.Should().Be("test");
            p.Page.Should().Be(1);
            p.Size.Should().Be(10);
            p.Options.Should().NotBeNull();
            p.Options.Count().Should().Be(2);
            p.Numbers.Count().Should().Be(2);
            p.Doubles.Count().Should().Be(2);
            p.Latitude.Should().Be(-53.3);
            p.Longitude.Should().Be(3.234);
            p.Location.Latitude.Should().Be(1);
            p.Location.Longitude.Should().Be(2);
            p.SortDirection.Should().Be(SortDirectionOption.Asc);
            p.EnumOptions.Should().Be(SomeOption.OptionOne);
        }
示例#9
0
        public void EmptyObjectsCreateNoQueryString()
        {
            var request = new { };
            var result  = QueryStringParser.GetQueryString(request);

            Assert.Equal(String.Empty, result);
        }
示例#10
0
        public void RepeatedParameters()
        {
            // Arrange
            StringBuilder builder = new StringBuilder();

            builder.Append("Name eq 'Microsoft' ");
            builder.Append("and Name eq 'Google' ");
            builder.Append("and Name eq 'Amazon'");
            string query = builder.ToString();

            QueryStringParser parser = null;

            // Act
            var info = GetQueryInformation(query, CompaniesContext, out parser);

            // Assert
            AssertNoWarningsOrExceptions(parser);

            var parameters = (from p in info.FilterParameters
                              where p.FieldName == "Name"
                              select p).ToList <FilterParameterDefinition>();

            Assert.AreEqual <int>(3, parameters.Count <FilterParameterDefinition>(), "The expected number of parameter elements wasn't found.");
            Assert.IsTrue(parameters.Exists(p => p.StringValue == "Microsoft"), "The expected filter value 'Microsoft' wasn't found.'");
            Assert.IsTrue(parameters.Exists(p => p.StringValue == "Google"), "The expected filter value 'Google' wasn't found.'");
            Assert.IsTrue(parameters.Exists(p => p.StringValue == "Amazon"), "The expected filter value 'Amazon' wasn't found.'");
        }
示例#11
0
        public void CanSerializeMultipleObjectQueryString()
        {
            var request = new { a = true, b = 2, c = "test" };
            var result  = QueryStringParser.GetQueryString(request);

            Assert.Equal("?a=true&b=2&c=test", result);
        }
示例#12
0
        public void CanSerializeObjectQueryString()
        {
            var request = new { a = true };
            var result  = QueryStringParser.GetQueryString(request);

            Assert.Equal("?a=true", result);
        }
        public object ReadRequestBody(Type bodyType, byte[] body)
        {
            // Extract text only from request body.
            var text = Encoding.UTF8.GetString(body ?? new byte[0]);

            return(QueryStringParser.ParseQueryString(text));
        }
示例#14
0
        public TParameters FirstPage()
        {
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page = 1;
            return(p);
        }
示例#15
0
        internal static string GenerateGrid(string gridName, out int statusCode, NameValueCollection nameValueCollection = null)
        {
            if (nameValueCollection == null)
            {
                nameValueCollection = new NameValueCollection();
            }

            statusCode = 200;
            IMVCGridDefinition grid        = MVCGridDefinitionTable.GetDefinitionInterface(gridName);
            QueryOptions       options     = QueryStringParser.ParseOptions(grid, nameValueCollection);
            GridContext        gridContext = MVCGrid.NetCore.Utility.GridContextUtility.Create(/*context, */ gridName, grid, options);

            GridEngine engine = new GridEngine();

            if (!engine.CheckAuthorization(gridContext))
            {
                //Forbidden
                statusCode = 403;
                return(string.Empty);
            }

            IMVCGridRenderingEngine renderingEngine = GridEngine.GetRenderingEngine(gridContext);

            // TODO: Reimplement this for csv exports and other rendering responses.
            //renderingEngine.PrepareResponse(context.Response);

            StringBuilder sb         = new StringBuilder();
            TextWriter    htmlWriter = new StringWriter(sb);

            engine.Run(renderingEngine, gridContext, htmlWriter);
            string html = sb.ToString();

            return(html);
        }
示例#16
0
        public void OrderReturnFieldDictionaryWhenIsSetInQuery()
        {
            var order = new Http.Rest.Query(QueryStringParser.Parse("sort[a]=asc")).Order;

            Assert.Equal("a", order[0].Field);
            Assert.Equal(Order.Asc, order[0].Order);
        }
        public TParameters NextPage()
        {
	        if (!HasNextPage) return null;
            var p = QueryStringParser<TParameters>.Copy(_parameters);
	        p.Page += 1;
	        return p;
	    }
        private async Task <bool> HandleIdSiteRedirectAsync(
            IOwinEnvironment context,
            IClient client,
            CancellationToken cancellationToken)
        {
            var application = await client.GetApplicationAsync(_configuration.Application.Href, cancellationToken);

            var options = _options as IdSiteRedirectOptions ?? new IdSiteRedirectOptions();

            var queryString = QueryStringParser.Parse(context.Request.QueryString, _logger);
            var stateToken  = queryString.GetString(StringConstants.StateTokenName);

            if (string.IsNullOrEmpty(stateToken) || !new StateTokenParser(client, _configuration.Client.ApiKey, stateToken, _logger).Valid)
            {
                stateToken = new StateTokenBuilder(client, _configuration.Client.ApiKey).ToString();
            }

            var idSiteUrlBuilder = application.NewIdSiteUrlBuilder()
                                   .SetCallbackUri(options.CallbackUri)
                                   .SetPath(options.Path)
                                   .SetState(stateToken);

            if (options.Logout)
            {
                idSiteUrlBuilder.ForLogout();
            }

            var idSiteUrl = idSiteUrlBuilder.Build();

            return(await HttpResponse.Redirect(context, idSiteUrl));
        }
	    public TParameters PreviousPage()
	    {
	        if (!HasPreviousPage) return null;
	        var p = QueryStringParser<TParameters>.Copy(_parameters);
	        p.Page -= 1;
	        return p;
        }
        public PagedSearchedQueryResult <NieuregulowanaFakturaZakupu> NieuregulowaneFakturyZakupu(int idFirmy, int idRoku, int?idKontrahenta, int page, string search, string asc, string desc,
                                                                                                  int pageSize = KancelariaSettings.PageSize, DateTime?stanNaDzien = null)
        {
            var Query = QueryStringParser <NieuregulowanaFakturaZakupu> .Parse(
                (from fz in db.NieuregulowanaFakturaZakupus
                 where fz.IdFirmy == idFirmy &&
                 fz.IdRoku == idRoku &&
                 (idKontrahenta.HasValue ? fz.IdKontrahenta == idKontrahenta : true) &&
                 fz.KwotaNieuregulowana != 0
                 select fz).SortBy(asc, desc, "DataFaktury"), new NieuregulowanaFakturyZakupuDictionary(), ref search
                );

            if (search != null)
            {
                Query = Query.Where(
                    q => q.NumerFaktury.Contains(search.ToLower()) ||
                    q.Opis.Contains(search.ToLower()) ||
                    q.NumerFaktury.Contains(search.ToLower())
                    );
            }

            if (stanNaDzien.HasValue)
            {
                Query = Query.Where(p => p.TerminPlatnosci <= stanNaDzien.Value);
            }

            if (idKontrahenta.HasValue)
            {
                Query = Query.Where(q => q.IdKontrahenta == idKontrahenta);
            }

            return(new PagedSearchedQueryResult <NieuregulowanaFakturaZakupu>(Query, page, pageSize, search));
        }
 public TParameters ForPage(int page)
 {
     if (!HasPage(page)) return null;
     var p = QueryStringParser<TParameters>.Copy(_parameters);
     p.Page = page;
     return p;
 }
        public void Parse()
        {
            QueryStringContainer queryStringContainer = new QueryStringContainer();
            QueryStringParser    queryStringParser    = new QueryStringParser();

            NameValueCollection queryStringFields = new NameValueCollection();

            queryStringFields.Add("s", "Hey");
            queryStringFields.Add("intField", "122");
            queryStringFields.Add("iaf", "1,23,456");
            queryStringFields.Add("df", "20070408");
            queryStringFields.Add("dtf", "20070408123456");
            queryStringFields.Add("sts", "Hi,There");
            queryStringFields.Add("integers", "1,2,3,4,5");
            queryStringFields.Add("b", "1");

            queryStringParser.Parse(queryStringFields, queryStringContainer);

            Assert.AreEqual("Hey", queryStringContainer.StringField);
            Assert.AreEqual(122, queryStringContainer.IntField);
            Assert.AreEqual(new int[] { 1, 23, 456 }, queryStringContainer.IntArrayField);
            Assert.AreEqual(new DateTime(2007, 4, 8), queryStringContainer.DateField);
            Assert.AreEqual(new DateTime(2007, 4, 8, 12, 34, 56), queryStringContainer.DateTimeField);

            Assert.AreEqual("Hi", queryStringContainer.Strings[0]);
            Assert.AreEqual("There", queryStringContainer.Strings[1]);

            Assert.AreEqual(1, queryStringContainer.Ints[0]);
            Assert.AreEqual(2, queryStringContainer.Ints[1]);
            Assert.AreEqual(3, queryStringContainer.Ints[2]);
            Assert.AreEqual(4, queryStringContainer.Ints[3]);
            Assert.AreEqual(5, queryStringContainer.Ints[4]);

            Assert.IsTrue(queryStringContainer.BoolField);
        }
示例#23
0
        public void OrderShouldReturnFieldsInOrder()
        {
            var order = new Http.Rest.Query(QueryStringParser.Parse("sort[x]=&sort[a]=")).Order;

            Assert.Equal("x", order[0].Field);
            Assert.Equal("a", order[1].Field);
        }
示例#24
0
        protected override async Task <bool> GetHtmlAsync(IOwinEnvironment context, IClient client, CancellationToken cancellationToken)
        {
            var queryString = QueryStringParser.Parse(context.Request.QueryString, _logger);
            var spToken     = queryString.GetString("sptoken");

            if (string.IsNullOrEmpty(spToken))
            {
                return(await HttpResponse.Redirect(context, _configuration.Web.ForgotPassword.Uri));
            }

            var application = await client.GetApplicationAsync(_configuration.Application.Href, cancellationToken);

            try
            {
                await application.VerifyPasswordResetTokenAsync(spToken, cancellationToken);

                var viewModelBuilder        = new ChangePasswordFormViewModelBuilder(client, _configuration);
                var changePasswordViewModel = viewModelBuilder.Build();

                await RenderViewAsync(context, _configuration.Web.ChangePassword.View, changePasswordViewModel, cancellationToken);

                return(true);
            }
            catch (ResourceException)
            {
                return(await HttpResponse.Redirect(context, _configuration.Web.ChangePassword.ErrorUri));
            }
        }
示例#25
0
        public TParameters LastPage()
        {
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page = (int)Pages;
            return(p);
        }
示例#26
0
        public void ParseEmptyQueryStringShouldReturnEmptyDictionary()
        {
            var url   = new Url("GET", "https://localhost:80/");
            var query = QueryStringParser.Parse(url.Query);

            Assert.Empty(query.ToList());
        }
示例#27
0
        public void ParseQueryStringShouldRewriteValueWithLastOccurence()
        {
            var url   = new Url("GET", "https://localhost:80/?field=asd&field=acd&field=axd");
            var query = QueryStringParser.Parse(url.Query);

            Assert.Equal("axd", query.GetValue("field"));
        }
示例#28
0
        public void ParseQueryStringShouldReturnEmptyValue()
        {
            var url   = new Url("GET", "https://localhost:80/?field=");
            var query = QueryStringParser.Parse(url.Query);

            Assert.Equal("", query.GetValue("field"));
        }
示例#29
0
        protected AggregationFilterModel <TParameters> SignificantTermsFilterFor(string filterName)
        {
            var propertyInfo = ParameterPropertyCache.FirstOrDefault(c => c.Key == filterName);

            if (string.IsNullOrWhiteSpace(propertyInfo.Key))
            {
                throw new ArgumentOutOfRangeException(nameof(filterName), $"Unable to find parameter named '{filterName}', ensure that either the parameters has a matching property or that a JsonProperty attribute is assigned");
            }

            var filterValue = propertyInfo.Value.GetValue(Parameters);

            var model = new AggregationFilterModel <TParameters>();
            var agg   = AggregationHelper.SignificantTerms(filterName);

            if (agg == null)
            {
                return(model);
            }

            model.Name        = filterName;
            model.Meta        = agg.Meta;
            model.Type        = agg.SearchifyAggregationType();
            model.DisplayName = agg.SearchifyDisplayName() ?? model.Name;

            model.Items = agg.Buckets.Select(item =>
            {
                var parameters = QueryStringParser <TParameters> .Copy(Parameters);

                var term  = item.Key;
                var value = item.Key;

                if (FilterField.TryParse(item.Key, out FilterField filterField))
                {
                    term  = filterField.Text;
                    value = filterField.Value;
                }

                var isSelected = value.Equals(filterValue);

                if (propertyInfo.Value != null)
                {
                    var convertablePropertyInfo = Nullable.GetUnderlyingType(propertyInfo.Value.PropertyType) ??
                                                  propertyInfo.Value.PropertyType;
                    propertyInfo.Value.SetValue(parameters,
                                                isSelected ? null : Convert.ChangeType(value, convertablePropertyInfo));
                }

                return(new TermFilterItemModel <TParameters>()
                {
                    Term = term,
                    Value = value,
                    DocCount = item.DocCount,
                    Selected = isSelected,
                    Parameters = parameters
                });
            }).ToList();

            return(model);
        }
示例#30
0
        public void ParseQueryStringShouldReturnArrayValue()
        {
            var url   = new Url("GET", "https://localhost:80/?field=asd&field=acd&field=axd");
            var query = QueryStringParser.Parse(url.Query);

            Assert.Equal("axd", query.GetValue("field"));
            Assert.Equal(new[] { "asd", "acd", "axd" }, query.GetValues("field"));
        }