HttpClient - 发送请求

时间:2018-02-18 10:26:50

标签: c# .net rest httpclient

我正在尝试从我的Dynamics CRM在线创建HttpRequest,以在外部ERP系统上创建记录。我使用HttpClient但我不确定我是否正确使用,我没有得到任何回复。代码如下:

 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);
    }

1 个答案:

答案 0 :(得分:2)

一旦HttpClient离开CreateClient方法中的using语句,它就会被处理掉。 删除CreateClient方法中的using语句,并在Execute方法中实现using使用

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);
}