C# HttpClient请求Webapi帮助类
引用 Newtonsoft.Json
// Post请求
public string PostResponse(string url,string postData,out string statusCode)
{
string result = string.Empty;
//设置Http的正文
HttpContent httpContent = new StringContent(postData);
//设置Http的内容标头
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
//设置Http的内容标头的字符
httpContent.Headers.ContentType.CharSet = "utf-8";
using(HttpClient httpClient=new HttpClient())
{
//异步Post
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
//输出Http响应状态码
statusCode = response.StatusCode.ToString();
//确保Http响应成功
if (response.IsSuccessStatusCode)
{
//异步读取json
result = response.Content.ReadAsStringAsync().Result;
}
}
return result;
} // 泛型:Post请求
public T PostResponse<T>(string url,string postData) where T:class,new()
{
T result = default(T); HttpContent httpContent = new StringContent(postData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
using(HttpClient httpClient=new HttpClient())
{
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
//Newtonsoft.Json
string json = JsonConvert.DeserializeObject(s).ToString();
result = JsonConvert.DeserializeObject<T>(json);
}
}
return result;
} // 泛型:Get请求
public T GetResponse<T>(string url) where T :class,new()
{
T result = default(T); using (HttpClient httpClient=new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url).Result; if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
string json = JsonConvert.DeserializeObject(s).ToString();
result = JsonConvert.DeserializeObject<T>(json);
}
}
return result;
} // Get请求
public string GetResponse(string url, out string statusCode)
{
string result = string.Empty; using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result;
statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync().Result;
}
}
return result;
} // Put请求
public string PutResponse(string url, string putData, out string statusCode)
{
string result = string.Empty;
HttpContent httpContent = new StringContent(putData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
using (HttpClient httpClient = new HttpClient())
{
HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result;
statusCode = response.StatusCode.ToString();
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync().Result;
}
}
return result;
} // 泛型:Put请求
public T PutResponse<T>(string url, string putData) where T : class, new()
{
T result = default(T);
HttpContent httpContent = new StringContent(putData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
using(HttpClient httpClient=new HttpClient())
{
HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
string json = JsonConvert.DeserializeObject(s).ToString();
result = JsonConvert.DeserializeObject<T>(json);
}
}
return result;
}
出处:https://blog.csdn.net/sun_zeliang/article/details/81587835
========================================================
我自己把上面的修改下,可以不引用 Newtonsoft.Json ,在POST模式的方法PostWebAPI增加了GZip的支持,请求超时设置,其他的功能可以自己去扩展,增加了简单调用的方式。
后续可以扩展异步方式、HttpWebRequest方式调用Webapi(待完成。。。)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization; namespace Car.AutoUpdate.Comm
{
public class WebapiHelper
{ #region HttpClient /// <summary>
/// Get请求指定的URL地址
/// </summary>
/// <param name="url">URL地址</param>
/// <returns></returns>
public static string GetWebAPI(string url)
{
string result = "";
string strOut = "";
try
{
result = GetWebAPI(url, out strOut);
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result;
} /// <summary>
/// Get请求指定的URL地址
/// </summary>
/// <param name="url">URL地址</param>
/// <param name="statusCode">Response返回的状态</param>
/// <returns></returns>
public static string GetWebAPI(string url, out string statusCode)
{
string result = string.Empty;
statusCode = string.Empty;
try
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result;
statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync().Result;
}
else
{
LogHelper.Warn("调用后台服务返回失败:" + url + Environment.NewLine + SerializeObject(response));
}
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result;
} /// <summary>
/// Get请求指定的URL地址
/// </summary>
/// <typeparam name="T">返回的json转换成指定实体对象</typeparam>
/// <param name="url">URL地址</param>
/// <returns></returns>
public static T GetWebAPI<T>(string url) where T : class, new()
{
T result = default(T);
try
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(url).Result; if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
string jsonNamespace = DeserializeObject<T>(s).ToString();
result = DeserializeObject<T>(s);
}
else
{
LogHelper.Warn("调用后台服务返回失败:" + url + Environment.NewLine + SerializeObject(response));
}
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
} return result;
} /// <summary>
/// Post请求指定的URL地址
/// </summary>
/// <param name="url">URL地址</param>
/// <param name="postData">提交到Web的Json格式的数据:如:{"ErrCode":"FileErr"}</param>
/// <returns></returns>
public static string PostWebAPI(string url, string postData)
{
string result = "";
HttpStatusCode strOut = HttpStatusCode.BadRequest;
try
{
result = PostWebAPI(url, postData, out strOut);
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result; } /// <summary>
/// Post请求指定的URL地址
/// </summary>
/// <param name="url">URL地址</param>
/// <param name="postData">提交到Web的Json格式的数据:如:{"ErrCode":"FileErr"}</param>
/// <param name="statusCode">Response返回的状态</param>
/// <returns></returns>
public static string PostWebAPI(string url, string postData, out HttpStatusCode httpStatusCode)
{
string result = string.Empty;
httpStatusCode = HttpStatusCode.BadRequest;
//设置Http的正文
HttpContent httpContent = new StringContent(postData);
//设置Http的内容标头
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
//设置Http的内容标头的字符
httpContent.Headers.ContentType.CharSet = "utf-8"; HttpClientHandler httpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
try
{
//using (HttpClient httpClient = new HttpClient(httpHandler))
using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = new TimeSpan(, , );
//异步Post
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
//输出Http响应状态码
httpStatusCode = response.StatusCode;
//确保Http响应成功
if (response.IsSuccessStatusCode)
{
//异步读取json
result = response.Content.ReadAsStringAsync().Result;
}
else
{
LogHelper.Warn("调用后台服务返回失败:" + url + Environment.NewLine + SerializeObject(response));
}
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result;
} /// <summary>
/// Post请求指定的URL地址
/// </summary>
/// <typeparam name="T">返回的json转换成指定实体对象</typeparam>
/// <param name="url">URL地址</param>
/// <param name="postData">提交到Web的Json格式的数据:如:{"ErrCode":"FileErr"}</param>
/// <returns></returns>
public static T PostWebAPI<T>(string url, string postData) where T : class, new()
{
T result = default(T); HttpContent httpContent = new StringContent(postData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8"; HttpClientHandler httpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
try
{
using (HttpClient httpClient = new HttpClient(httpHandler))
{
HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
//Newtonsoft.Json
string jsonNamespace = DeserializeObject<T>(s).ToString();
result = DeserializeObject<T>(s);
}
else
{
LogHelper.Warn("调用后台服务返回失败:" + url + Environment.NewLine + SerializeObject(response));
}
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result;
} /// <summary>
/// Put请求指定的URL地址
/// </summary>
/// <param name="url">URL地址</param>
/// <param name="putData">提交到Web的Json格式的数据:如:{"ErrCode":"FileErr"}</param>
/// <returns></returns>
public static string PutWebAPI(string url, string putData)
{
string result = "";
string strOut = "";
result = PutWebAPI(url, putData, out strOut);
return result;
} /// <summary>
/// Put请求指定的URL地址
/// </summary>
/// <param name="url">URL地址</param>
/// <param name="putData">提交到Web的Json格式的数据:如:{"ErrCode":"FileErr"}</param>
/// <param name="statusCode">Response返回的状态</param>
/// <returns></returns>
public static string PutWebAPI(string url, string putData, out string statusCode)
{
string result = statusCode = string.Empty;
HttpContent httpContent = new StringContent(putData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
try
{
using (HttpClient httpClient = new HttpClient())
{
HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result;
statusCode = response.StatusCode.ToString();
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync().Result;
}
else
{
LogHelper.Warn("调用后台服务返回失败:" + url + Environment.NewLine + SerializeObject(response));
}
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result;
} /// <summary>
/// Put请求指定的URL地址
/// </summary>
/// <typeparam name="T">返回的json转换成指定实体对象</typeparam>
/// <param name="url">URL地址</param>
/// <param name="putData">提交到Web的Json格式的数据:如:{"ErrCode":"FileErr"}</param>
/// <returns></returns>
public static T PutWebAPI<T>(string url, string putData) where T : class, new()
{
T result = default(T);
HttpContent httpContent = new StringContent(putData);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
try
{
using (HttpClient httpClient = new HttpClient())
{
HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; if (response.IsSuccessStatusCode)
{
Task<string> t = response.Content.ReadAsStringAsync();
string s = t.Result;
string jsonNamespace = DeserializeObject<T>(s).ToString();
result = DeserializeObject<T>(s);
}
else
{
LogHelper.Warn("调用后台服务返回失败:" + url + Environment.NewLine + SerializeObject(response));
}
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return result;
} /// <summary>
/// 对象转JSON
/// </summary>
/// <param name="obj">对象</param>
/// <returns>JSON格式的字符串</returns>
public static string SerializeObject(object obj)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
try
{
return jss.Serialize(obj);
}
catch (Exception ex)
{
LogHelper.Error("JSONHelper.SerializeObject 转换对象失败。", ex);
throw new Exception("JSONHelper.SerializeObject(object obj): " + ex.Message);
}
} /// <summary>
/// 将Json字符串转换为对像
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T DeserializeObject<T>(string json)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
T objs = default(T);
try
{
objs = Serializer.Deserialize<T>(json);
}
catch (Exception ex)
{
LogHelper.Error("JSONHelper.DeserializeObject 转换对象失败。", ex);
throw new Exception("JSONHelper.DeserializeObject<T>(string json): " + ex.Message);
}
return objs; } #endregion private static HttpResponseMessage HttpPost(string url, HttpContent httpContent)
{
HttpResponseMessage response = null;
HttpClientHandler httpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
try
{
//using (HttpClient httpClient = new HttpClient(httpHandler))
using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = new TimeSpan(, , );
//异步Post
response = httpClient.PostAsync(url, httpContent).Result;
}
}
catch (Exception ex)
{
LogHelper.Error("调用后台服务出现异常!", ex);
}
return response;
} }
}
下面再分享一个帮助类,有用到的做个参考吧
using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks; namespace WebCollect.CommonHelp
{
public static class CommonHelper
{
#region HttpClient
private static HttpClient _httpClient;
public static HttpClient httpClient
{
get
{
if (_httpClient == null)
{
_httpClient = new HttpClient();
_httpClient.Timeout = new TimeSpan(, , ); }
return _httpClient;
}
set { _httpClient = value; }
} #endregion #region get请求
/// <summary>
/// get请求返回的字符串
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetRequestStr(string url)
{
try
{
var response = httpClient.GetAsync(new Uri(url)).Result;
return response.Content.ReadAsStringAsync().Result;
}
catch (Exception)
{
return null;
}
}
/// <summary>
/// get请求返回的二进制
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static byte[] GetRequestByteArr(string url)
{
try
{
var response = httpClient.GetAsync(new Uri(url)).Result;
return response.Content.ReadAsByteArrayAsync().Result;
}
catch (Exception)
{
return null;
}
}
#endregion #region post请求
/// <summary>
/// post请求返回的字符串
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string PostRequestStr(string url)
{
try
{
string contentStr = "";
StringContent sc = new StringContent(contentStr);
sc.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");//todo
var response = httpClient.PostAsync(new Uri(url), sc).Result;
return response.Content.ReadAsStringAsync().Result;
}
catch (Exception)
{
return null;
}
}
#endregion }
}
C# HttpClient请求Webapi帮助类的更多相关文章
- HttpClient 请求WebApi
HttpClient client = new HttpClient(); client.BaseAddress = new Uri(ConfigurationManager.AppSettings[ ...
- HttpClient后台post 请求webapi
1.请求方法 /// <summary> /// httpClient 请求接口 /// </summary> /// <param name="url&quo ...
- C# HttpClient 请求认证、数据传输笔记
目录 一,授权认证 二,请求类型 三,数据传输 C# HttpClient 请求认证.数据传输笔记 一,授权认证 客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 ...
- 请求WebApi的几种方式
目前所了解的请求WebAPI的方式有通过后台访问api 和通过js 直接访问api接口 首先介绍下通过后台访问api的方法,可以使用HttpClient的方式也可以使用WebRequest的方式 1. ...
- HttpClient请求服务器代码优化版
HttpClient请求服务器代码优化版 首先,我在前面的两篇博文中介绍了在 Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换 ...
- Android使用HttpClient请求服务器代码优化版
首先,我在前面的两篇博文中介绍了在Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附 ...
- httpclient与webapi
System.Net.Http 是微软推出的最新的 HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通过 HTTP 使用现代化的 Web S ...
- HTTP请求客户端工具类
1.maven 引入依赖 <dependency> <groupId>commons-httpclient</groupId> <artifactId> ...
- 发送http请求和https请求的工具类
package com.haiyisoft.cAssistant.utils; import java.io.IOException;import java.util.ArrayList; impor ...
随机推荐
- tf.nn.conv2d
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) input: 指需要做卷积的输入图像,它 ...
- 自定义AXI-IP核(转)
目的: 自定义一个IP核,通过AXI总线与ARM系统连接 环境: Win7 32bit Vivado2014.4.1 Xilinx sdk2014.4 开发板: Zc702 第一步: 新建一个自定义的 ...
- DevExpress WPF v18.2新版亮点(六)
买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...
- Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容
Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...
- 特殊权限set_gid
set gid: 权限说明: set gid权限可以作用在文件上(二进制可执行文件),也可以作用在目录上.当作用在文件上时,其功能和set,uid一样,它会使文件在执行阶段具有文件所属组的权限.目录被 ...
- Python pandas快速入门
Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...
- 【Python】多线程-2
1. 进程和线程的区别: (1) 一个进程可以有多个线程,一个进程中的多个线程共享该进程的所有资源,多线程切换比多进程切换快,因为不用上下文切换,Python中并发建议用多进程 (2) 进程是资 ...
- SQL注入之Sqli-labs系列第二关
废话不在多说 let's go! 继续挑战第二关(Error Based- Intiger) 同样的前奏,就不截图了 ,and 1=1和and 1=2进行测试,出现报错 还原sql语句 查看源代 ...
- 关于PHP程序员技术职业生涯规划[转]
看到很多PHP程序员职业规划的文章,都是直接上来就提Linux.PHP.MySQL.Nginx.Redis.Memcache.jQuery这些,然后就直接上手搭环境.做项目,中级就是学习各种PHP框架 ...
- Github&&SourceTree
如何将本地的代码或者是文件上传到github 方法一:(github上面创建仓库,远程仓库克隆到本地,将文件拖拽到本地仓库) cd 文件夹 git clone 链接(github上面创建新仓库的链 ...