コード例 #1
0
        // GET: Search
        public ActionResult Search(SearchRequestModel searchCriteria)
        {
            var response = _productApi.GetKeywordRedirect();
            var obj      = response.Result.Where(x => x.Keywords.Trim().Equals(searchCriteria.FreeText)).FirstOrDefault();

            if (obj != null)
            {
                return(Redirect(obj.Url));
            }
            foreach (var item in response.Result)
            {
                if (item.Keywords.Contains(',') && item.Keywords.Trim().Split(',').Where(s => s.Equals(searchCriteria.FreeText)).FirstOrDefault() != null)
                {
                    return(Redirect(item.Url));
                }
            }
            searchCriteria.AllowFacet = true;
            searchCriteria.AllowFacet = Request.QueryString[Constants.SEARCH_SURVEY_QUERYSTRING] == null?true:false;
            if (Request.QueryString[Constants.SEARCH_FILTER_QUERYSTRING] != null)
            {
                searchCriteria.Filters = new List <SearchFilter>();
                var qryfilters = Request.QueryString[Constants.SEARCH_FILTER_QUERYSTRING];
                foreach (var qfilter in qryfilters.Split(';'))
                {
                    foreach (var val in qfilter.Split(':')[1].Split(','))
                    {
                        var filter = new SearchFilter {
                            Key = Constants.ATTRIBUTE_FILTER_PREFIX + qfilter.Split(':')[0], Value = val
                        };
                        searchCriteria.Filters.Add(filter);
                    }
                }
            }

            var searchRequestModel = sanitizeInput(searchCriteria);
            var result             = SearchHelper.GetPaginatedProducts(searchRequestModel);

            if (result.Results != null && result.Results.Count == 1)
            {
                if (!String.IsNullOrEmpty(result.Results[0].Slug))
                {
                    return(RedirectToAction("ProductDetail", "Product", new { name = result.Results[0].Slug.Split('/')[1] }));
                }
            }
            //TODO: Sort by shoudl be part of the search result itself and NOT a separate call
            //var sortBy = _productApi.GetSortBy();
            searchCriteria.ResultCount = (result.Results == null) ? 0 : result.Results.Count;
            SetDataLayerVariables(searchCriteria, WebhookEventTypes.FreeText);
            return(View(CustomViews.SEARCH, result));
        }