这次要介绍的是我的zxb框架的网络请求部分 先来介绍一下核心类
HttpEnums HttpMethod 请求方式 取值为GET或POSTHttpHeader http请求头部信息HttpParam 参数对象 k,v的形式HttpParamUrlEncode 继承HttpParam 此类同名字一样,会将参数进行Url编码HttpHelper 本框架核心类提供请求方法 请看代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ZXB.NET { using System.Net; using System.IO; using ZXB.NET.Exception; public class HttpHelper { /// <summary> /// 获取请求中的数据 /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual byte[] GetData(HttpWebRequest request) { RequestSet(request); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); switch (response.StatusCode) { case HttpStatusCode.BadRequest: throw new HttpRequestException("请求状态异常"); } Stream inStream = response.GetResponseStream(); MemoryStream ms = new MemoryStream(); byte[] data = new byte[1024]; int len = 0; while ((len = inStream.Read(data, 0, data.Length)) != 0) { ms.Write(data, 0, len); } return ms.ToArray(); } /// <summary> /// 获取请求中的数据 数据为文本 /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual string GetText(HttpWebRequest request, Encoding encoding) { return encoding.GetString(GetData(request)); } /// <summary> /// 获取请求中的数据 数据为文本 编码为utf-8 /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual string GetText(HttpWebRequest request) { return GetText(request, Encoding.UTF8); } /// <summary> /// 获取请求中的数据 /// </summary> /// <param name="url"></param> /// <returns></returns> public virtual byte[] GetData(string url) { return GetData((HttpWebRequest)WebRequest.Create(url)); } /// <summary> /// 获取请求中的数据 数据为文本 /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <returns></returns> public virtual string GetText(string url, Encoding encoding) { return GetText((HttpWebRequest)WebRequest.Create(url), encoding); } /// <summary> /// 获取请求中的数据 数据为文本 编码为utf-8 /// </summary> /// <param name="url">路径</param> /// <returns></returns> public virtual string GetText(string url) { return GetText(url, Encoding.UTF8); } /// <summary> /// 将请求中的数据写入磁盘 /// </summary> /// <param name="url">请求路径</param> /// <param name="path">磁盘路径</param> public virtual void WriterToFile(string url, string path) { byte[] data = GetData(url); File.WriteAllBytes(path, data); } /// <summary> /// 获得请求中的数据 /// </summary> /// <param name="request"></param> /// <param name="param"></param> /// <returns></returns> public virtual byte[] GetData(HttpWebRequest request,HttpParam param) { if (request.Method.Equals("POST")) { if (param != null) { byte[] paramByte = param.ToBytes(); request.ContentLength = paramByte.Length; Stream stream = request.GetRequestStream(); stream.Write(paramByte, 0, paramByte.Length); return GetData(request); } else { return GetData(request); } } else { return GetData(request); } } /// <summary> /// 获得请求中的数据 /// </summary> /// <param name="url"></param> /// <param name="headers"></param> /// <param name="param"></param> /// <returns></returns> public virtual byte[] GetData(string url, HttpHeaders headers, HttpParam param) { if (param != null) { if (headers != null) { if (headers.Method == HttpMethod.Get) { url += "?" + param.ToString(); } } else { url += "?" + param.ToString(); } } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); if (headers != null) { request.Method = headers.Method.ToString(); if (headers.ContentType != null && !headers.ContentType.Equals("")) { request.ContentType = headers.ContentType; } } return GetData(request, param); } /// <summary> /// 获得请求中的数据 GET方式 /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <returns></returns> public virtual byte[] GetData(string url, HttpParam param) { return GetData(url,null,param); } /// <summary> /// 获得请求中的数据 /// </summary> /// <param name="url">请求路径</param> /// <param name="param">请求参数</param> /// <param name="method">请求方式</param> /// <returns></returns> public virtual byte[] GetData(string url,HttpParam param,HttpMethod method) { HttpHeaders headers = new HttpHeaders(); headers.Method = method; return GetData(url,headers,param); } /// <summary> /// 获取请求中的数据 数据为文本 /// </summary> /// <param name="url"></param> /// <param name="headers"></param> /// <param name="param"></param> /// <param name="encoding"></param> /// <returns></returns> public virtual string GetText(string url,HttpHeaders headers,HttpParam param,Encoding encoding) { return encoding.GetString(GetData(url,headers,param)); } /// <summary> /// 获取请求中的数据 数据为文本 编码为utf-8 /// </summary> /// <param name="url"></param> /// <param name="headers"></param> /// <param name="param"></param> /// <returns></returns> public virtual string GetText(string url, HttpHeaders headers, HttpParam param) { return GetText(url,headers,param,Encoding.UTF8); } /// <summary> /// 获取请求中的数据 数据为文本 /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <param name="encoding"></param> /// <returns></returns> public virtual string GetText(string url, HttpParam param,Encoding encoding) { return encoding.GetString(GetData(url, param)); } /// <summary> /// 获取请求中的数据 数据为文本 编码为utf-8 /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <returns></returns> public virtual string GetText(string url, HttpParam param) { return GetText(url,param,Encoding.UTF8); } public virtual string GetText(string url, HttpParam param, HttpMethod method, Encoding encoding) { return encoding.GetString(GetData(url,param,method)); } public virtual string GetText(string url, HttpParam param, HttpMethod method) { return GetText(url, param, method, Encoding.UTF8); } /// <summary> /// 设置request参数 如需要扩展在子类重写此方法 /// </summary> /// <param name="request"></param> protected virtual void RequestSet(HttpWebRequest request) { } } }接下来是一个基于本框架的实例
从网络上获取数据 开发工具 vs2013 使用框架 MVC4服务端Controller代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcApplication3.Controllers { public class HelloController : Controller { // // GET: /Hello/ public ActionResult Load() { List<dynamic> list = new List<dynamic>(); list.Add(new { Id=1,Name="小一",Age=20}); list.Add(new { Id = 2, Name = "小二", Age = 21 }); list.Add(new { Id = 3, Name = "小三", Age = 22 }); return Json(list, JsonRequestBehavior.AllowGet); } } }数据
[{"Id":1,"Name":"小一","Age":20},{"Id":2,"Name":"小二","Age":21},{"Id":3,"Name":"小三","Age":22}]客户端页面 客户端代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication2 { using ZXB.NET; using Newtonsoft.Json; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { HttpHelper hp = new HttpHelper(); List<dynamic> list = JsonConvert.DeserializeObject<List<dynamic>>(hp.GetText("http://localhost:4950/hello/load")); this.dataGridView1.DataSource = list; } } }源码下载地址:链接:http://pan.baidu.com/s/1boQHrVh 密码:r5wa