public async Task <HttpResponseHeaders> InvokeAsync(string methodName, IDictionary <string, object> parameters, IDictionary <string, string>?headers = null) { var endpoint = _document.GetEndpoint(_serviceName, methodName); var contentType = _document.GetRequestContentType(endpoint); var url = new Uri(new Uri(_hostLocation), endpoint); using (var client = new HttpClient()) { HttpResponseMessage response; using (var request = new MemoryStream()) { using (var writer = new StreamWriter(request, leaveOpen: true)) { JsonSerializer.CreateDefault().Serialize(writer, parameters); } request.Position = 0; using (var content = new StreamContent(request)) { content.Headers.ContentType = new MediaTypeHeaderValue(contentType); if (headers != null) { foreach (var entry in headers) { content.Headers.Add(entry.Key, entry.Value); } } response = await client.PostAsync(url, content).ConfigureAwait(false); } } response.EnsureSuccessStatusCode(); return(response.Headers); } }