2014-10-13 76 views
0

我想要一个通用函数,它将发送一个http请求&返回一个HttpResponseMessage。 这是我现在得到的。HttpClient检索Web API响应

 public static HttpResponseMessage SendRequest(string actionUri, string baseAddress, HttpRequestMessage request) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri(baseAddress); 

      HttpResponseMessage response = null; 

      foreach (var header in request.Headers) 
      { 
       client.DefaultRequestHeaders.Add(header.Key, header.Value); 
      } 

      if (request.Method == HttpMethod.Get) 
      { 
       response = client.GetAsync(actionUri).Result; 
      } 

      if (request.Method == HttpMethod.Post) 
      { 
       response = client.PostAsync(actionUri, request.Content).Result; 
      } 

      if (request.Method == HttpMethod.Put) 
      { 
       response = client.PutAsync(actionUri, request.Content).Result; 
      } 

      if (request.Method == HttpMethod.Delete) 
      { 
       response = client.DeleteAsync(actionUri).Result; 
      } 
      return response; 
     } 
    } 

以上功能可以写成下面

public static HttpResponseMessage SendRequest1(string actionUri, string baseAddress, HttpRequestMessage request) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri(baseAddress); 
      return client.SendAsync(request).Result; 

     } 
    } 

是否有使用第二种方法与基于HTTP动词的显式调用的任何问题。对于一些请求,我收到GET请求的错误为“无法使用此动词类型发送内容主体”

回答

1

第二段代码对我来说看起来很好; GET请求不应包含内容主体。

在第一个例子你忽略内容体在GET请求的情况下,在第二个例子中,你是在让框架抛出一个异常(它被设计用来做)。