public FhirResponse GetResponse(ResourceFormat? acceptFormat) { bool needsFormatParam = UseFormatParameter && acceptFormat.HasValue; var location = new RestUrl(_location); if(needsFormatParam) location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(acceptFormat.Value)); var request = createRequest(location.ToString(), _method); if(acceptFormat != null && !UseFormatParameter) request.Accept = ContentType.BuildContentType(acceptFormat.Value, forBundle: false); if (_body != null) { request.WriteBody(_body); request.ContentType = _contentType; if(_contentLocation != null) request.Headers[HttpRequestHeader.ContentLocation] = _contentLocation; } if(_categoryHeader != null) request.Headers[HttpUtil.CATEGORY] = _categoryHeader; FhirResponse result = null; // Make sure the HttpResponse gets disposed! using (HttpWebResponse response = (HttpWebResponse)request.GetResponseNoEx()) { result = FhirResponse.FromHttpWebResponse(response); } return result; }
public void TestEscaping() { var url = new RestUrl("http://www.server.org/fhir"); url.AddParam("_since", FhirDateTime.Now().Value); var output = url.Uri; Assert.IsFalse(output.ToString().Contains("+")); // don't use un-escaped + }
public FhirResponse GetResponse(ResourceFormat?acceptFormat) { bool needsFormatParam = UseFormatParameter && acceptFormat.HasValue; var location = new RestUrl(_location); if (needsFormatParam) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(acceptFormat.Value)); } System.Diagnostics.Debug.WriteLine("{0}: {1}", _method, location.Uri.OriginalString); var request = createRequest(location.Uri, _method); if (acceptFormat != null && !UseFormatParameter) { request.Accept = ContentType.BuildContentType(acceptFormat.Value, forBundle: false); } if (_body != null) { request.WriteBody(_body); request.ContentType = _contentType; if (_contentLocation != null) { request.Headers[HttpRequestHeader.ContentLocation] = _contentLocation; } } if (_categoryHeader != null) { request.Headers[HttpUtil.CATEGORY] = _categoryHeader; } FhirResponse result = null; #if !PORTABLE45 request.Timeout = Timeout; #endif // Make sure the HttpResponse gets disposed! if (_beforeRequest != null) { _beforeRequest(request); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponseNoEx()) { result = FhirResponse.FromHttpWebResponse(response); if (_afterRequest != null) { _afterRequest(response); } } return(result); }
private void addHistoryEntry(RestUrl path, SummaryType?summaryOnly = null, int?pageSize = null, DateTimeOffset?since = null) { var entry = newEntry(Bundle.HTTPVerb.GET, InteractionType.History); if (summaryOnly.HasValue) { path.AddParam(SearchParams.SEARCH_PARAM_SUMMARY, summaryOnly.Value.ToString().ToLower()); } if (pageSize.HasValue) { path.AddParam(HttpUtil.HISTORY_PARAM_COUNT, pageSize.Value.ToString()); } if (since.HasValue) { path.AddParam(HttpUtil.HISTORY_PARAM_SINCE, PrimitiveTypeConverter.ConvertTo <string>(since.Value)); } addEntry(entry, path); }
/// <summary> /// Retrieve the version history of any resource on the server /// </summary> /// <param name="since">Optional. Returns only changes after the given date</param> /// <param name="count">Optional. Asks server to limit the number of entries returned</param> /// <returns>A bundle with the history for the indicated instance, may contain both /// ResourceEntries and DeletedEntries.</returns> public Bundle WholeSystemHistory(DateTimeOffset?since = null, int?count = null) { if (_endpoint == null) { throw new InvalidOperationException("Endpoint must be provided using either the Endpoint property or the FhirClient constructor"); } var rl = new RestUrl(_endpoint).ServerHistory(); if (since != null) { rl.AddParam(HttpUtil.HISTORY_PARAM_SINCE, PrimitiveTypeConverter.ConvertTo <string>(since.Value)); } if (count != null) { rl.AddParam(HttpUtil.HISTORY_PARAM_COUNT, count.ToString()); } return(FetchBundle(rl.Uri)); }
public void Query() { RestUrl endpoint = new RestUrl("http://localhost/fhir"); RestUrl resturi; resturi = endpoint.Search("organization").AddParam("family", "Johnson").AddParam("given", "William"); Assert.AreEqual("http://localhost/fhir/organization/_search?family=Johnson&given=William", resturi.AsString); var rl2 = new RestUrl(resturi.Uri); rl2.AddParam("given","Piet"); Assert.AreEqual("http://localhost/fhir/organization/_search?family=Johnson&given=William&given=Piet", rl2.AsString); }
public async Task <WebResponse> GetResponseAsync(ResourceFormat?acceptFormat) { bool needsFormatParam = UseFormatParameter && acceptFormat.HasValue; var location = new RestUrl(_location); if (needsFormatParam) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(acceptFormat.Value)); } System.Diagnostics.Debug.WriteLine("(async) {0}: {1}", _method, location.ToString()); HttpWebRequest request = createRequest(location.Uri, _method); if (acceptFormat != null && !UseFormatParameter) { request.Accept = ContentType.BuildContentType(acceptFormat.Value, forBundle: false); } if (_categoryHeader != null) { request.Headers[HttpUtil.CATEGORY] = _categoryHeader; } if (_body != null) { request.ContentType = _contentType; if (_contentLocation != null) { request.Headers[HttpRequestHeader.ContentLocation] = _contentLocation; } await request.WriteBodyAsync(_body); } // Make sure the caller disposes the HttpResponse gets disposed... if (_beforeRequest != null) { _beforeRequest(request); } var response = await request.GetResponseAsync(TimeSpan.FromMilliseconds(Timeout)); if (_afterRequest != null) { _afterRequest(response); } return(response); }
public static HttpWebRequest ToHttpRequest(this Bundle.BundleEntryComponent entry, Prefer bodyPreference, ResourceFormat format, bool useFormatParameter, out byte[] body) { System.Diagnostics.Debug.WriteLine("{0}: {1}", entry.Request.Method, entry.Request.Url); var interaction = entry.Request; body = null; if (entry.Resource != null && !(interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT)) throw Error.InvalidOperation("Cannot have a body on an Http " + interaction.Method.ToString()); var location = new RestUrl(interaction.Url); if (useFormatParameter) location.AddParam(HttpUtil.RESTPARAM_FORMAT, Hl7.Fhir.Rest.ContentType.BuildFormatParam(format)); var request = (HttpWebRequest)HttpWebRequest.Create(location.Uri); request.Method = interaction.Method.ToString(); setAgent(request, ".NET FhirClient for FHIR " + Model.ModelInfo.Version); if (!useFormatParameter) request.Accept = Hl7.Fhir.Rest.ContentType.BuildContentType(format, forBundle: false); if (interaction.IfMatch != null) request.Headers["If-Match"] = interaction.IfMatch; if (interaction.IfNoneMatch != null) request.Headers["If-None-Match"] = interaction.IfNoneMatch; #if PORTABLE45 if (interaction.IfModifiedSince != null) request.Headers["If-Modified-Since"] = interaction.IfModifiedSince.Value.UtcDateTime.ToString(); #else if (interaction.IfModifiedSince != null) request.IfModifiedSince = interaction.IfModifiedSince.Value.UtcDateTime; #endif if (interaction.IfNoneExist != null) request.Headers["If-None-Exist"] = interaction.IfNoneExist; if (interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT) { if (bodyPreference == Prefer.ReturnMinimal) request.Headers["Prefer"] = bodyPreference == Prefer.ReturnMinimal ? "return=minimal" : "return=representation"; } if (entry.Resource != null) setBodyAndContentType(request, entry.Resource, format, out body); return request; }
public TransactionBuilder EndpointOperation(RestUrl endpoint, Parameters parameters, bool useGet = false) { var entry = newEntry(useGet ? Bundle.HTTPVerb.GET : Bundle.HTTPVerb.POST, InteractionType.Operation); var path = new RestUrl(endpoint); if (useGet) { if (parameters != null) { foreach (var parameter in parameters.Parameter) { path.AddParam(parameter.Name, paramValueToString(parameter)); } } } else { entry.Resource = parameters; } addEntry(entry, path); return(this); }
public void ParamManipulation() { var rl = new RestUrl("http://someserver.org/fhir/Patient/search?name=Kramer&name=Moreau&oauth=XXX"); rl.AddParam("newParamA", "1"); rl.SetParam("newParamB", "2"); Assert.IsTrue(rl.ToString().EndsWith("oauth=XXX&newParamA=1&newParamB=2")); rl.SetParam("newParamA", "3"); rl.ClearParam("newParamB"); Assert.IsTrue(rl.ToString().EndsWith("oauth=XXX&newParamA=3")); rl.AddParam("newParamA", "4"); Assert.IsTrue(rl.ToString().EndsWith("oauth=XXX&newParamA=3&newParamA=4")); rl.AddParam("newParamB", "5"); Assert.IsTrue(rl.ToString().EndsWith("oauth=XXX&newParamA=3&newParamA=4&newParamB=5")); rl.SetParam("newParamA", "6"); Assert.IsTrue(rl.ToString().EndsWith("oauth=XXX&newParamA=6&newParamB=5")); rl.ClearParams(); Assert.IsTrue(rl.ToString().EndsWith("search")); }
public static HttpWebRequest ToHttpRequest(this Bundle.BundleEntryComponent entry, Prefer bodyPreference, ResourceFormat format, bool useFormatParameter) { System.Diagnostics.Debug.WriteLine("{0}: {1}", entry.Transaction.Method, entry.Transaction.Url); var interaction = entry.Transaction; if (entry.Resource != null && !(interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT)) { throw Error.InvalidOperation("Cannot have a body on an Http " + interaction.Method.ToString()); } var location = new RestUrl(interaction.Url); if (useFormatParameter) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, Hl7.Fhir.Rest.ContentType.BuildFormatParam(format)); } var request = (HttpWebRequest)HttpWebRequest.Create(location.Uri); request.Method = interaction.Method.ToString(); setAgent(request, ".NET FhirClient for FHIR " + Model.ModelInfo.Version); if (!useFormatParameter) { request.Accept = Hl7.Fhir.Rest.ContentType.BuildContentType(format, forBundle: false); } if (interaction.IfMatch != null) { request.Headers["If-Match"] = interaction.IfMatch; } if (interaction.IfNoneMatch != null) { request.Headers["If-None-Match"] = interaction.IfNoneMatch; } #if (PORTABLE45 || NETCOREAPP1_1) if (interaction.IfModifiedSince != null) { request.Headers["If-Modified-Since"] = interaction.IfModifiedSince.Value.UtcDateTime.ToString(); } #else if (interaction.IfModifiedSince != null) { request.IfModifiedSince = interaction.IfModifiedSince.Value.UtcDateTime; } #endif if (interaction.IfNoneExist != null) { request.Headers["If-None-Exist"] = interaction.IfNoneExist; } if (interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT) { if (bodyPreference == Prefer.ReturnMinimal) { request.Headers["Prefer"] = bodyPreference == Prefer.ReturnMinimal ? "return=minimal" : "return=representation"; } } if (entry.Resource != null) { setBodyAndContentType(request, entry.Resource, format); } return(request); }
public static HttpRequestMessage ToHttpRequestMessage(this EntryRequest entry, Uri baseUrl, FhirClientSettings settings) { System.Diagnostics.Debug.WriteLine("{0}: {1}", entry.Method, entry.Url); if (entry.RequestBodyContent != null && !(entry.Method == HTTPVerb.POST || entry.Method == HTTPVerb.PUT)) { throw Error.InvalidOperation("Cannot have a body on an Http " + entry.Method.ToString()); } // Create an absolute uri when the interaction.Url is relative. var uri = new Uri(entry.Url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { uri = HttpUtil.MakeAbsoluteToBase(uri, baseUrl); } var location = new RestUrl(uri); if (settings.UseFormatParameter) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(settings.PreferredFormat)); } var request = new HttpRequestMessage(getMethod(entry.Method), location.Uri); request.Headers.Add("User-Agent", ".NET FhirClient for FHIR " + entry.Agent); if (!settings.UseFormatParameter) { request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(ContentType.BuildContentType(settings.PreferredFormat, forBundle: false))); } if (entry.Headers.IfMatch != null) { request.Headers.Add("If-Match", entry.Headers.IfMatch); } if (entry.Headers.IfNoneMatch != null) { request.Headers.Add("If-None-Match", entry.Headers.IfNoneMatch); } if (entry.Headers.IfModifiedSince != null) { request.Headers.IfModifiedSince = entry.Headers.IfModifiedSince.Value.UtcDateTime; } if (entry.Headers.IfNoneExist != null) { request.Headers.Add("If-None-Exist", entry.Headers.IfNoneExist); } var interactionType = entry.Type; bool canHaveReturnPreference() => entry.Type == InteractionType.Create || entry.Type == InteractionType.Update || entry.Type == InteractionType.Patch; if (canHaveReturnPreference() && settings.PreferredReturn != null) { if (settings.PreferredReturn == Prefer.RespondAsync) { request.Headers.Add("Prefer", PrimitiveTypeConverter.ConvertTo <string>(settings.PreferredReturn)); } else { request.Headers.Add("Prefer", "return=" + PrimitiveTypeConverter.ConvertTo <string>(settings.PreferredReturn)); } } else if (interactionType == InteractionType.Search && settings.PreferredParameterHandling != null) { List <string> preferHeader = new List <string>(); if (settings.PreferredParameterHandling.HasValue) { preferHeader.Add("handling=" + settings.PreferredParameterHandling.GetLiteral()); } if (settings.PreferredReturn.HasValue && settings.PreferredReturn == Prefer.RespondAsync) { preferHeader.Add(settings.PreferredReturn.GetLiteral()); } if (preferHeader.Count > 0) { request.Headers.Add("Prefer", string.Join(", ", preferHeader)); } } if (entry.RequestBodyContent != null) { setContentAndContentType(request, entry.RequestBodyContent, entry.ContentType, settings.PreferredFormat); } return(request); }
public static HttpWebRequest ToHttpWebRequest(this EntryRequest entry, Uri baseUrl, FhirClientSettings settings) { System.Diagnostics.Debug.WriteLine("{0}: {1}", (object)entry.Method, (object)entry.Url); if (entry.RequestBodyContent != null && !(entry.Method == HTTPVerb.POST || entry.Method == HTTPVerb.PUT)) { throw Error.InvalidOperation((string)("Cannot have a body on an Http " + entry.Method.ToString())); } // Create an absolute uri when the interaction.Url is relative. var uri = new Uri(entry.Url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { uri = HttpUtil.MakeAbsoluteToBase(uri, baseUrl); } var location = new RestUrl(uri); if (settings.UseFormatParameter) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(settings.PreferredFormat)); } var request = (HttpWebRequest)HttpWebRequest.Create(location.Uri); request.Method = entry.Method.ToString(); setAgent(request, ".NET FhirClient for FHIR " + entry.Agent); if (!settings.UseFormatParameter) { request.Accept = ContentType.BuildContentType(settings.PreferredFormat, forBundle: false); } request.ContentType = entry.ContentType ?? ContentType.BuildContentType(settings.PreferredFormat, forBundle: false); if (entry.Headers.IfMatch != null) { request.Headers["If-Match"] = entry.Headers.IfMatch; } if (entry.Headers.IfNoneMatch != null) { request.Headers["If-None-Match"] = entry.Headers.IfNoneMatch; } #if NETSTANDARD1_1 if (entry.Headers.IfModifiedSince != null) { request.Headers["If-Modified-Since"] = entry.Headers.IfModifiedSince.Value.UtcDateTime.ToString(); } #else if (entry.Headers.IfModifiedSince != null) { request.IfModifiedSince = entry.Headers.IfModifiedSince.Value.UtcDateTime; } #endif if (entry.Headers.IfNoneExist != null) { request.Headers["If-None-Exist"] = entry.Headers.IfNoneExist; } if (canHaveReturnPreference() && settings.PreferredReturn.HasValue) { if (settings.PreferredReturn == Prefer.RespondAsync) { request.Headers["Prefer"] = PrimitiveTypeConverter.ConvertTo <string>(settings.PreferredReturn); } else { request.Headers["Prefer"] = "return=" + PrimitiveTypeConverter.ConvertTo <string>(settings.PreferredReturn); } } else if (entry.Type == InteractionType.Search) { List <string> preferHeader = new List <string>(); if (settings.PreferredParameterHandling.HasValue) { preferHeader.Add("handling=" + settings.PreferredParameterHandling.GetLiteral()); } if (settings.PreferredReturn.HasValue && settings.PreferredReturn == Prefer.RespondAsync) { preferHeader.Add(settings.PreferredReturn.GetLiteral()); } if (preferHeader.Count > 0) { request.Headers["Prefer"] = string.Join(", ", preferHeader); } } bool canHaveReturnPreference() => entry.Type == InteractionType.Create || entry.Type == InteractionType.Update || entry.Type == InteractionType.Patch; // PCL doesn't support setting the length (and in this case will be empty anyway) #if !NETSTANDARD1_1 if (entry.RequestBodyContent == null) { request.ContentLength = 0; } #endif return(request); }
public async Task<WebResponse> GetResponseAsync(ResourceFormat? acceptFormat) { bool needsFormatParam = UseFormatParameter && acceptFormat.HasValue; var location = new RestUrl(_location); if (needsFormatParam) location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(acceptFormat.Value)); System.Diagnostics.Debug.WriteLine("(async) {0}: {1}", _method, location.ToString()); HttpWebRequest request = createRequest(location.Uri, _method); if (acceptFormat != null && !UseFormatParameter) request.Accept = ContentType.BuildContentType(acceptFormat.Value, forBundle: false); if (_categoryHeader != null) request.Headers[HttpUtil.CATEGORY] = _categoryHeader; if (_body != null) { request.ContentType = _contentType; if (_contentLocation != null) request.Headers[HttpRequestHeader.ContentLocation] = _contentLocation; await request.WriteBodyAsync(_body); } // Make sure the caller disposes the HttpResponse gets disposed... if (_beforeRequest != null) _beforeRequest(request); var webResponse = await request.GetResponseAsync(TimeSpan.FromMilliseconds(Timeout)); if (_afterRequest != null) _afterRequest(webResponse, null); return response; }
public FhirResponse GetResponse(ResourceFormat? acceptFormat) { bool needsFormatParam = UseFormatParameter && acceptFormat.HasValue; var location = new RestUrl(_location); if(needsFormatParam) location.AddParam(HttpUtil.RESTPARAM_FORMAT, ContentType.BuildFormatParam(acceptFormat.Value)); System.Diagnostics.Debug.WriteLine("{0}: {1}", _method, location.Uri.OriginalString); var request = createRequest(location.Uri, _method); if(acceptFormat != null && !UseFormatParameter) request.Accept = ContentType.BuildContentType(acceptFormat.Value, forBundle: false); if (_body != null) { request.WriteBody(_body); request.ContentType = _contentType; if(_contentLocation != null) request.Headers[HttpRequestHeader.ContentLocation] = _contentLocation; } if(_categoryHeader != null) request.Headers[HttpUtil.CATEGORY] = _categoryHeader; FhirResponse fhirResponse = null; #if !PORTABLE45 request.Timeout = Timeout; #endif // Make sure the HttpResponse gets disposed! if (_beforeRequest != null) _beforeRequest(request, _body); using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponseNoEx()) { fhirResponse = FhirResponse.FromHttpWebResponse(webResponse); if (_afterRequest != null) _afterRequest(webResponse, fhirResponse); } return fhirResponse; }
public static HttpWebRequest ToHttpRequest(this Bundle.EntryComponent entry, Prefer bodyPreference, ResourceFormat format, bool useFormatParameter, bool CompressRequestBody, out byte[] body) { System.Diagnostics.Debug.WriteLine("{0}: {1}", entry.Request.Method, entry.Request.Url); var interaction = entry.Request; body = null; if (entry.Resource != null && !(interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT)) { throw Error.InvalidOperation("Cannot have a body on an Http " + interaction.Method.ToString()); } var location = new RestUrl(interaction.Url); if (useFormatParameter) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, Hl7.Fhir.Rest.ContentType.BuildFormatParam(format)); } var request = (HttpWebRequest)HttpWebRequest.Create(location.Uri); request.Method = interaction.Method.ToString(); setAgent(request, ".NET FhirClient for FHIR " + Model.ModelInfo.Version); if (!useFormatParameter) { request.Accept = Hl7.Fhir.Rest.ContentType.BuildContentType(format, forBundle: false); } if (interaction.IfMatch != null) { request.Headers["If-Match"] = interaction.IfMatch; } if (interaction.IfNoneMatch != null) { request.Headers["If-None-Match"] = interaction.IfNoneMatch; } #if DOTNETFW if (interaction.IfModifiedSince != null) { request.IfModifiedSince = interaction.IfModifiedSince.Value.UtcDateTime; } #else if (interaction.IfModifiedSince != null) { request.Headers["If-Modified-Since"] = interaction.IfModifiedSince.Value.UtcDateTime.ToString(); } #endif if (interaction.IfNoneExist != null) { request.Headers["If-None-Exist"] = interaction.IfNoneExist; } if (interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT) { request.Headers["Prefer"] = bodyPreference == Prefer.ReturnMinimal ? "return=minimal" : "return=representation"; } if (entry.Resource != null) { setBodyAndContentType(request, entry.Resource, format, CompressRequestBody, out body); } // PCL doesn't support setting the length (and in this case will be empty anyway) #if DOTNETFW else { request.ContentLength = 0; } #endif return(request); }
private void addHistoryEntry(RestUrl path, bool? summaryOnly = null, int? pageSize=null, DateTimeOffset? since = null) { var entry = newEntry(Bundle.HTTPVerb.GET); if(summaryOnly.HasValue) path.AddParam(SearchParams.SEARCH_PARAM_SUMMARY, PrimitiveTypeConverter.ConvertTo<string>(summaryOnly.Value)); if(pageSize.HasValue) path.AddParam(HttpUtil.HISTORY_PARAM_COUNT, pageSize.Value.ToString()); if(since.HasValue) path.AddParam(HttpUtil.HISTORY_PARAM_SINCE, PrimitiveTypeConverter.ConvertTo<string>(since.Value)); addEntry(entry, path); }
public static HttpWebRequest ToHttpRequest(this Bundle.EntryComponent entry, Uri baseUrl, Prefer bodyPreference, ResourceFormat format, bool useFormatParameter, bool CompressRequestBody, out byte[] body) { System.Diagnostics.Debug.WriteLine("{0}: {1}", entry.Request.Method, entry.Request.Url); var interaction = entry.Request; body = null; if (entry.Resource != null && !(interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT)) { throw Error.InvalidOperation("Cannot have a body on an Http " + interaction.Method.ToString()); } // Create an absolute uri when the interaction.Url is relative. var uri = new Uri(interaction.Url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { uri = HttpUtil.MakeAbsoluteToBase(uri, baseUrl); } var location = new RestUrl(uri); if (useFormatParameter) { location.AddParam(HttpUtil.RESTPARAM_FORMAT, Hl7.Fhir.Rest.ContentType.BuildFormatParam(format)); } var request = (HttpWebRequest)HttpWebRequest.Create(location.Uri); request.Method = interaction.Method.ToString(); setAgent(request, ".NET FhirClient for FHIR " + Model.ModelInfo.Version); if (!useFormatParameter) { request.Accept = Hl7.Fhir.Rest.ContentType.BuildContentType(format, forBundle: false); } if (interaction.IfMatch != null) { request.Headers["If-Match"] = interaction.IfMatch; } if (interaction.IfNoneMatch != null) { request.Headers["If-None-Match"] = interaction.IfNoneMatch; } #if NETSTANDARD1_1 if (interaction.IfModifiedSince != null) { request.Headers["If-Modified-Since"] = interaction.IfModifiedSince.Value.UtcDateTime.ToString(); } #else if (interaction.IfModifiedSince != null) { request.IfModifiedSince = interaction.IfModifiedSince.Value.UtcDateTime; } #endif if (interaction.IfNoneExist != null) { request.Headers["If-None-Exist"] = interaction.IfNoneExist; } if (interaction.Method == Bundle.HTTPVerb.POST || interaction.Method == Bundle.HTTPVerb.PUT) { request.Headers["Prefer"] = bodyPreference == Prefer.ReturnMinimal ? "return=minimal" : "return=representation"; } if (entry.Resource != null) { bool searchUsingPost = interaction.Method == Bundle.HTTPVerb.POST && (entry.HasAnnotation <TransactionBuilder.InteractionType>() && entry.Annotation <TransactionBuilder.InteractionType>() == TransactionBuilder.InteractionType.Search) && entry.Resource is Parameters; setBodyAndContentType(request, entry.Resource, format, CompressRequestBody, searchUsingPost, out body); } // PCL doesn't support setting the length (and in this case will be empty anyway) #if !NETSTANDARD1_1 else { request.ContentLength = 0; } #endif return(request); }