必须引用 System.Net 这个只要 framework4.o 之前都有,这就是HttpWebRequest 比httpClient 用广的原因,下面就列举几种用法和微信公众号使用案例
Post
方式比较简单,传入的值value 是已经序列化好json 对象
public string PostValue(string Url, string value)
{
try
{
Encoding myEncoding = Encoding.Default;
byte[] postBytes = Encoding.UTF8.GetBytes(value);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url);
req.Method = "POST";
req.ContentType = "application/json";
req.ContentLength = postBytes.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(postBytes, 0, postBytes.Length);
}
using (WebResponse wr = req.GetResponse())
{
System.IO.Stream respStream = wr.GetResponseStream();
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.Default))
{
return reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
Get
方式也是比较简单,需要注意的是,webrequest 不支持写入参数值只能拼写到Url后
public string GetValues(string Url, int pageSize, int pageIndex) { try { Encoding myEncoding = Encoding.Default; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url + "?pageSize=" + pageSize + "&pageIndex=" + pageIndex); req.Method = "Get"; req.ContentType = "text/plain"; using (WebResponse wr = req.GetResponse()) { System.IO.Stream respStream = wr.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.Default)) { return reader.ReadToEnd(); } } } catch (Exception ex) { throw ex; } }
微信公众号上传媒资,这段代码我是从java翻过来的,没有问题可以贴过去直接用,HttpPostFileBase 这个 .net Mvc 封装获取文件的一个工具类,这里如果改一下,传文件流和文件名称就行
/// <summary> /// 发起httpPost 请求,可以上传文件 /// </summary> /// <param name="url">请求的地址</param> /// <param name="files">文件</param> /// <param name="input">表单数据</param> /// <param name="endoding">编码</param> /// <returns></returns> public static string PostResponse(string url, HttpPostedFileBase file, Dictionary<string, string> input, Encoding endoding, byte[] data1) { return PostResponse(url, file, input, endoding, data1, "media"); } /// <summary> /// 发起httpPost 请求,可以上传文件 /// </summary> /// <param name="url">请求的地址</param> /// <param name="files">文件</param> /// <param name="input">表单数据</param> /// <param name="endoding">编码</param> /// <returns></returns> public static string PostResponse(string url, HttpPostedFileBase file, Dictionary<string, string> input, Encoding endoding, byte[] data1,string name) { string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; request.KeepAlive = true; //request.Credentials = CredentialCache.DefaultCredentials; request.Expect = ""; MemoryStream stream = new MemoryStream(); byte[] line = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); byte[] enterER = Encoding.ASCII.GetBytes("\r\n"); ////提交文件 if (file != null) { string fformat = "Content-Disposition:form-data; name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n"; stream.Write(line, 0, line.Length); //项目分隔符 string s = string.Format(fformat, name, file.FileName, file.ContentType); byte[] data = Encoding.UTF8.GetBytes(s); stream.Write(data, 0, data.Length); stream.Write(data1, 0, data1.Length); stream.Write(enterER, 0, enterER.Length); //添加\r\n } //提交文本字段 if (input != null) { string format = "--" + boundary + "\r\nContent-Disposition:form-data;name=\"{0}\"\r\n\r\n{1}\r\n"; //自带项目分隔符 foreach (string key in input.Keys) { string s = string.Format(format, key, input[key]); byte[] data = Encoding.UTF8.GetBytes(s); stream.Write(data, 0, data.Length); } } byte[] foot_data = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); //项目最后的分隔符字符串需要带上-- stream.Write(foot_data, 0, foot_data.Length); request.ContentLength = stream.Length; Stream requestStream = request.GetRequestStream(); //写入请求数据 stream.Position = 0L; stream.CopyTo(requestStream); // stream.Close(); requestStream.Close(); try { HttpWebResponse response; response = (HttpWebResponse)request.GetResponse(); using (var responseStream = response.GetResponseStream()) using (var mstream = new MemoryStream()) { responseStream.CopyTo(mstream); string message = endoding.GetString(mstream.ToArray()); return message; } } catch (Exception ex) { throw ex; } }