2015-06-26 3 views
3

В настоящее время в моих проектах я использую класс HttpWebRequest для вызова любых API-интерфейсов REST.C# HttpClient или HttpWebRequest класс

как этот

public string Post(string postData) 
    { 
     string resultString = string.Empty; 

     WebRequest req = WebRequest.Create(_serviceEndoint); 

     HttpWebRequest httpWebReq = (HttpWebRequest)req; 
     httpWebReq.CookieContainer = _cookieContainer; 

     req.ContentType = "application/xml"; 
     req.Method = "POST"; 
     req.Credentials = new NetworkCredential("Administrator", "Password"); 
     try 
     { 
      Stream requestStream = req.GetRequestStream(); 

      UTF8Encoding encoding = new UTF8Encoding(); 

      byte[] bytes = encoding.GetBytes(postData); 
      requestStream.Write(bytes, 0, bytes.Length); 

      HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 

      if (resp.StatusCode == HttpStatusCode.OK) 
      { 
       using (Stream respStream = resp.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(respStream, Encoding.UTF8); 

        resultString = reader.ReadToEnd(); 
       } 
      } 

     } 
     catch (Exception ex) 
     { 
      resultString = ex.ToString(); 
     } 

     return resultString; 
    } 

Это работает :) Но мне любопытно довольно новый способ сделать это. Имеет ли класс HttpClient какие-либо недостатки (ваш опыт, мнения)?

Использует этот класс в настоящее время как лучший способ вызвать службы отдыха (получить, отправить, поместить, удалить) вместо того, чтобы делать все это вручную?

+0

'HttpClient' гораздо проще. – SLaks

+0

Любые вещи, которые я не могу сделать, когда предпочитаю HttpClient над другим? –

ответ

2

Преимущество HttpClient состоит в том, что оно проще и поддерживается для большинства профилей библиотеки портативных классов. Недостатком является то, что он не поддерживает запросы, отличные от http, которые делает WebRequest. Другими словами HttpClient является заменой HttpWebRequest но не AFAIK замена FtpWebRequest и т.д.

Также см этот пост для более подробной информации: HttpClient vs HttpWebRequest

Смежные вопросы