C# HttpWebRequest\HttpWebResponse\WebClient发送请求解析json数据

来源:互联网 发布:手机mac地址怎么查看 编辑:程序博客网 时间:2024/05/17 03:23
======================================================================================================================================/// <summary>/// 日期:2016-2-4/// 备注:bug已修改,可以使用/// </summary>public static void Method1(){    try    {        string domain = "http://192.168.1.6:8098/";        string url = domain + "/Signin/LoginApi";        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);        request.Method = "POST";        request.ContentType = "application/x-www-form-urlencoded";        //request.ContentType = "application/json";        request.ReadWriteTimeout = 30 * 1000;        ///添加参数        Dictionary<String, String> dicList = new Dictionary<String, String>();        dicList.Add("UserName", "test@qq.com");        dicList.Add("Password", "000000");        String postStr = buildQueryStr(dicList);        byte[] data = Encoding.UTF8.GetBytes(postStr);        request.ContentLength = data.Length;        Stream myRequestStream = request.GetRequestStream();        myRequestStream.Write(data, 0, data.Length);        myRequestStream.Close();        HttpWebResponse response = (HttpWebResponse)request.GetResponse();        StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);        var retString = myStreamReader.ReadToEnd();        myStreamReader.Close();    }    catch (Exception ex)    {        log.Info("Entered ItemHierarchyController - Initialize");        log.Error(ex.Message);    }}======================================================================================================================================


升级版本,提取到帮助类,封装对象

using System;using System.Collections.Generic;using System.Configuration;using System.IO;using System.Net;using System.Text;using System.Web;namespace CMS.Common{    public class MyHttpClient    {        public string methodUrl = string.Empty;        public string postStr = null;        public MyHttpClient(String methodUrl)        {            this.methodUrl = methodUrl;        }        public MyHttpClient(String methodUrl, String postStr)        {            ///this.methodUrl = ConfigurationManager.AppSettings["ApiFrontEnd"];///http://192.168.1.6:8098/Signin/LoginApi            ///this.postStr = postStr;            this.methodUrl = methodUrl;            this.postStr = postStr;        }        /// <summary>        /// GET Method        /// </summary>        /// <returns></returns>        public String ExecuteGet()        {            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(this.methodUrl);            myRequest.Method = "GET";            HttpWebResponse myResponse = null;            try            {                myResponse = (HttpWebResponse)myRequest.GetResponse();                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);                string content = reader.ReadToEnd();                return content;            }            //异常请求            catch (WebException e)            {                myResponse = (HttpWebResponse)e.Response;                using (Stream errData = myResponse.GetResponseStream())                {                    using (StreamReader reader = new StreamReader(errData))                    {                        string text = reader.ReadToEnd();                        return text;                    }                }            }        }        /// <summary>        /// POST Method        /// </summary>        /// <returns></returns>        public string ExecutePost()        {            string content = string.Empty;            Random rd = new Random();            int rd_i = rd.Next();            String nonce = Convert.ToString(rd_i);            String timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));            String signature = GetHash(this.appSecret + nonce + timestamp);            try            {                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.methodUrl);                request.Method = "POST";                request.ContentType = "application/x-www-form-urlencoded";                //request.ContentType = "application/json";                request.Headers.Add("Nonce", nonce);                request.Headers.Add("Timestamp", Convert.ToString(StringProc.ConvertDateTimeInt(DateTime.Now)));                request.Headers.Add("Signature", signature);                request.ReadWriteTimeout = 30 * 1000;                byte[] data = Encoding.UTF8.GetBytes(postStr);                request.ContentLength = data.Length;                Stream myRequestStream = request.GetRequestStream();                myRequestStream.Write(data, 0, data.Length);                myRequestStream.Close();                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);                content = myStreamReader.ReadToEnd();                myStreamReader.Close();            }            catch (Exception ex)            {            }            return content;        }    }    public class StringProc    {        public static String buildQueryStr(Dictionary<String, String> dicList)        {            String postStr = "";            foreach (var item in dicList)            {                postStr += item.Key + "=" + HttpUtility.UrlEncode(item.Value, Encoding.UTF8) + "&";            }            postStr = postStr.Substring(0, postStr.LastIndexOf('&'));            return postStr;        }        public static int ConvertDateTimeInt(System.DateTime time)        {            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));            return (int)(time - startTime).TotalSeconds;        }    }}

前端调用

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using CMS.Common;using Newtonsoft.Json;namespace Medicine.Web.Controllers{    public class DefaultController : Controller    {        public ActionResult Index()        {            #region DoGet            string getResultJson = this.DoGet(url);            HttpClientResult customerResult = (HttpClientResult)JsonConvert.DeserializeObject(getResultJson, typeof(HttpClientResult));            #endregion            #region DoPost            string name = Request.Form["UserName"];            string password = Request.Form["Password"];            Dictionary<String, String> dicList = new Dictionary<String, String>();            dicList.Add("UserName", name);            dicList.Add("Password", password);            string postStr = StringProc.buildQueryStr(dicList);            string postResultJson = this.DoPost(url, postStr);            HttpClientResult userResult = (HttpClientResult)JsonConvert.DeserializeObject(postResultJson, typeof(HttpClientResult));            #endregion            return View();        }        /// <summary>        /// GET Method        /// </summary>        /// <param name="portraitUri">url地址</param>        /// <returns></returns>        private String DoGet(string portraitUri)        {            MyHttpClient client = new MyHttpClient(portraitUri);            return client.ExecuteGet();        }        /// <summary>        /// POST Method        /// </summary>        /// <param name="portraitUri">url地址</param>        /// <param name="postStr">请求参数</param>        /// <returns></returns>        private String DoPost(string portraitUri, string postStr)        {            MyHttpClient client = new MyHttpClient(portraitUri, postStr);            return client.ExecutePost();        }        public class HttpClientResult        {            public string UserName { get; set; }            public bool Success { get; set; }        }    }}

3 0