Reputation: 1
I'm trying to make a HttpRequest from my Dynamics CRM online to create a record on the external ERP system. I use HttpClient but I am not sure if I did it correctly, I am not getting any response. Code below:
public async void Execute(){
string query1 = $"<RequestData>" +
$"<firstField>{model.firstField}</firstField>" +
$"<secondField>{model.secondField}</secondField>" +
$"<thirdField>{model.thirdField}</thirdField>" +
$"</RequestData>";
HttpClient client = CreateClient();
HttpResponseMessage response = await SendRequest(client, HttpMethod.Put, query);
}
private HttpClient CreateClient()
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = baseAdress;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
}
private async Task<HttpResponseMessage> SendRequest(HttpClient httpClient, HttpMethod method, string query)
{
HttpRequestMessage request = new HttpRequestMessage(method, query);
return await httpClient.SendAsync(request);
}
Upvotes: 0
Views: 289
Reputation: 16801
As soon as the HttpClient is leaving the using statement in the CreateClient method its being disposed. Remove the using statement in the CreateClient method and implement the using in the Execute method instead
public async void Execute()
{
string query = $"<RequestData>" +
$"<firstField>{model.firstField}</firstField>" +
$"<secondField>{model.secondField}</secondField>" +
$"<thirdField>{model.thirdField}</thirdField>" +
$"</RequestData>";
using(HttpClient client = CreateClient())
{
HttpResponseMessage response = await SendRequest(client, HttpMethod.Put, query);
}
}
private HttpClient CreateClient()
{
var client = new HttpClient();
client.BaseAddress = baseAdress;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
private async Task<HttpResponseMessage> SendRequest(HttpClient httpClient, HttpMethod method, string query)
{
HttpRequestMessage request = new HttpRequestMessage(method, query);
return await httpClient.SendAsync(request);
}
Upvotes: 2