public async Task <HttpResponseMessage> Get(string resource) { string respval; if (Request.RequestUri.AbsolutePath.ToLower().EndsWith("metadata")) { respval = SerializeResponse(FhirHelper.GenerateCapabilityStatement(Request.RequestUri.AbsoluteUri)); } else { var nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query); var id = nvc["_id"]; var nextpage = nvc["_nextpage"]; var count = nvc["_count"] ?? "100"; var querytotal = nvc["_querytotal"] ?? "-1"; IEnumerable <Resource> retVal; ResourceQueryResult searchrslt = null; int iqueryTotal; if (string.IsNullOrEmpty(id)) { var query = FhirParmMapper.Instance.GenerateQuery(storage, resource, nvc); searchrslt = await storage.QueryFhirResourceAsync(query, resource, int.Parse(count), nextpage, long.Parse(querytotal)). ConfigureAwait(false); retVal = searchrslt.Resources; iqueryTotal = (int)searchrslt.Total; } else { retVal = new List <Resource>(); var r = await storage.LoadFhirResourceAsync(id, resource).ConfigureAwait(false); if (r != null) { ((List <Resource>)retVal).Add(r); } iqueryTotal = retVal.Count(); } var baseurl = Request.RequestUri.Scheme + "://" + Request.RequestUri.Authority + "/" + resource; var results = new Bundle { Id = Guid.NewGuid().ToString(), Type = Bundle.BundleType.Searchset, Total = iqueryTotal, Link = new List <Bundle.LinkComponent>() }; var qscoll = Request.RequestUri.ParseQueryString(); qscoll.Remove("_count"); qscoll.Remove("_querytotal"); qscoll.Add("_querytotal", searchrslt.Total.ToString()); qscoll.Add("_count", count); results.Link.Add(new Bundle.LinkComponent { Url = baseurl + "?" + qscoll, Relation = "self" }); if (searchrslt.ContinuationToken != null) { qscoll.Remove("_nextpage"); qscoll.Add("_nextpage", searchrslt.ContinuationToken); results.Link.Add(new Bundle.LinkComponent { Url = baseurl + "?" + qscoll, Relation = "next" }); } results.Entry = new List <Bundle.EntryComponent>(); var match = new Bundle.SearchComponent { Mode = Bundle.SearchEntryMode.Match }; var include = new Bundle.SearchComponent { Mode = Bundle.SearchEntryMode.Include }; foreach (var p in retVal) { results.Entry.Add(new Bundle.EntryComponent { Resource = p, FullUrl = FhirHelper.GetFullUrl(Request, p), Search = match }); var includes = await FhirHelper.ProcessIncludesAsync(p, nvc, storage).ConfigureAwait(false); foreach (var r in includes) { results.Entry.Add(new Bundle.EntryComponent { Resource = r, FullUrl = FhirHelper.GetFullUrl(Request, r), Search = include }); } } respval = SerializeResponse(results); } var response = Request.CreateResponse(HttpStatusCode.OK); response.Headers.TryAddWithoutValidation("Accept", CurrentAcceptType); response.Content = new StringContent(respval, Encoding.UTF8); response.Content.Headers.TryAddWithoutValidation("Content-Type", IsAccceptTypeJson ? Fhircontenttypejson : Fhircontenttypexml); return(response); }