Jarmoosh
Jarmoosh

Reputation: 1

HttpClient - sending a request

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

Answers (1)

Marcus H&#246;glund
Marcus H&#246;glund

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

Related Questions