///
/// 基于.net4.5 HttpClient实现
/// 由于HttpClient有预热机制,第一次进行访问时比较慢,所以最好不用用到HttpClient就New一次,应该使用单例模式保持一个对象即可
///
public class WebAPIHelper where Output:class
{
private static WebAPIHelper _webApi;
private WebAPIHelper() { }
public WebAPIHelper<Output> Instance
{
get
{
if(_webApi==null)
{
_webApi = new WebAPIHelper<Output>();
}
return _webApi;
}
}
/// <summary>
/// Get请求调用
/// </summary>
/// <param name="urlPath"></param>
/// <returns></returns>
public async Task<Output> GetCall(string urlPath)
{
HttpClientHandler handler = new HttpClientHandler() {AutomaticDecompression=DecompressionMethods.GZip };
HttpClient httpClient = new HttpClient();
//异步请求
HttpResponseMessage response = await httpClient.GetAsync(urlPath);
//确保响应正常,如果响应不正常,则抛出异常
response.EnsureSuccessStatusCode();
//异步读取数据
string resultStr = await response.Content.ReadAsStringAsync();
Output result = JsonConvert.DeserializeObject<Output>(resultStr);
return result;
}
/// <summary>
/// Post请求调用
/// </summary>
/// <param name="urlPath"></param>
/// <param name="data">post数据</param>
/// <returns></returns>
public async Task<Output> PostCall(string urlPath,string data)
{
HttpClientHandler handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
HttpClient httpClient = new HttpClient(handler);
//HttpContent是HTTP实体正文和内容标头的基类。
HttpContent httpContent = new StringContent(data, Encoding.UTF8, "text/json");
//httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BasicAuth", Ticket);//验证请求头赋值
//httpContent.Headers.Add(string name,string value) //添加自定义请求头
//发送异步Post请求
HttpResponseMessage response = await httpClient.PostAsync(urlPath, httpContent);
response.EnsureSuccessStatusCode();
string resultStr = await response.Content.ReadAsStringAsync();
Output result = JsonConvert.DeserializeObject<Output>(resultStr);
return result;
}
}
486

被折叠的 条评论
为什么被折叠?



