本文转载自微信公众号“马农读书”,作者马农读书。转载本文请联系码农阅读公众号。我们在使用.NET调用RestAPI时,通常有三种选择:WebClient、HttpWebRequest、HttpClient。在本文中,我们将讨论如何使用这三种方法来调用RestAPI,我也会提供相应的代码案例,帮助您更好地理解这三种方法的概念和用法。简单地说:HttpWebRequest是一种相对低级的处理Http请求/响应的方式。WebClient对HttpWebRequest进行了高度封装,简化了用户的调用。HttpClient是一个新的工具包,用于处理具有更高性能的Http请求/响应。接下来我们讨论抽象类WebRequest。WebRequestWebRequest是基于特定的http实现。它是一个抽象类,所以在处理Reqeust请求时,底层会根据传入的url生成相应的子类,如:HttpWebRequest或FileWebRequest。下面的代码展示了如何使用WebRequest。WebRequestwebRequest=WebRequest.Create(uri);webRequest.Credentials=CredentialCache.DefaultCredentials;webRequest.Method="GET";HttpWebResponsewebResponse=(HttpWebResponse)webRequest.GetResponse();WebRequest是.NETFramework中第一个处理Http请求的类为调用者提供了很多处理Http请求和响应的灵活性。您还可以使用此类来访问标头、cookie、协议和超时等。下面的代码显示了它的实现子类HttpWebRequest是如何使用它的。HttpWebRequesthttp=HttpWebRequest)WebRequest.Create(“http://localhost:8900/api/default”);WebResponseresponse=http.GetResponse();MemoryStreammemoryStream=response.GetResponseStream();StreamReadersstreamReader=newStreamReader(memoryReadStream);stringerdata=streamReadToEnd();WebClientWebClient是对HttpWebRequest的高层封装,为调用者提供更方便的使用方式。当然,做出的牺牲是WebClient的性能略逊于HttpWebRequest。如果你的业务场景只是简单的访问第三方的HttpService,那我建议你使用WebClient。同样,如果您有更细粒度的配置,请使用HttpWebRequest。下面的代码展示了如何使用WebClient。stringdata=null;using(varwebClient=newWebClient()){data=webClient.DownloadString(url);}HttpClientHttpClient是在.NETFramework4.5中引入的,如果你的项目是基于.NET4.5或以上的,除了一些特定的之外究其原因,建议大家先使用HttpClient。从本质上讲,HttpClient是后来的东西。它吸收了HttpWebRequest的灵活性和WebClient的方便性,因此可以兼得。HttpWebRequest在请求/响应对象上提供了非常细粒度的配置。同时你也要注意,HttpClient的出现并不是为了取代WebClient。言外之意HttpClient也有缺点,比如:不能提供进度处理和URI定制,不支持FTP等等等,HttpClient的优点还是有很多的。它所有的IO操作方法都是异步的。当然,如果有特殊原因,也可以使用同步方式。下面的代码展示了如何使用HttpClient。publicasyncTask
