public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { if (bindingContext.ModelType != typeof(DynamicContentEvaluationContext)) { return false; } var qs = HttpUtility.ParseQueryString(actionContext.Request.RequestUri.Query as string); var result = new DynamicContentEvaluationContext(); result.StoreId = qs.Get("storeId") ?? qs.Get("evalContext.storeId"); result.PlaceName= qs.Get("placeName") ?? qs.Get("evalContext.placeName"); result.Tags = qs.GetValues("tags"); if (result.Tags == null) { var tags = qs.Get("evalContext.tags"); if (!String.IsNullOrEmpty(tags)) { result.Tags = tags.Split(','); } } var toDate = qs.Get("toDate") ?? qs.Get("evalContext.toDate"); if (toDate != null) { result.ToDate = Convert.ToDateTime(toDate, CultureInfo.InvariantCulture); } bindingContext.Model = result; return true; }
public IHttpActionResult GetDynamicContent( string[] placeHolders, [FromUri] string[] tags, string language = "en-us") { var tagSet = new TagSet(); if (tags != null) { foreach (var tagArray in tags.Select(tag => tag.Split(new[] { ':' }))) { tagSet.Add(tagArray[0], tagArray[1]); } } // TODO: add tags ?tags={users:[id1,id2]} // TODO: add caching //Mutiple placeholders can be requested var groups = new List<webModel.DynamicContentItemGroup>(); foreach (var holder in placeHolders) { var group = new webModel.DynamicContentItemGroup(holder); var ctx = new DynamicContentEvaluationContext(holder, DateTime.Now, tagSet); var results = _contentEvaluator.EvaluateItems(ctx); if (results != null && results.Any()) { group.Items.AddRange(results.Select(x => x.ToWebModel())); groups.Add(group); } } var retVal = new webModel.ResponseCollection<webModel.DynamicContentItemGroup> { Items = groups, TotalCount = groups.Count() }; return this.Ok(retVal); //return this.StatusCode(HttpStatusCode.NoContent); }