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

时间:2022-06-03 16:23:34

http://blog.csdn.net/kingcruel/article/details/44036871

版权声明:本文为博主原创文章,未经博主允许不得转载。

  1. ======================================================================================================================================
  2. /// <summary>
  3. /// 日期:2016-2-4
  4. /// 备注:bug已修改,可以使用
  5. /// </summary>
  6. public static void Method1()
  7. {
  8. try
  9. {
  10. string domain = "http://192.168.1.6:8098/";
  11. string url = domain + "/Signin/LoginApi";
  12. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  13. request.Method = "POST";
  14. request.ContentType = "application/x-www-form-urlencoded";
  15. request.ReadWriteTimeout = 30 * 1000;
  16. ///添加参数
  17. Dictionary<String, String> dicList = new Dictionary<String, String>();
  18. dicList.Add("UserName", "test@qq.com");
  19. dicList.Add("Password", "000000");
  20. String postStr = buildQueryStr(dicList);
  21. byte[] data = Encoding.UTF8.GetBytes(postStr);
  22. request.ContentLength = data.Length;
  23. Stream myRequestStream = request.GetRequestStream();
  24. myRequestStream.Write(data, 0, data.Length);
  25. myRequestStream.Close();
  26. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  27. StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  28. var retString = myStreamReader.ReadToEnd();
  29. myStreamReader.Close();
  30. }
  31. catch (Exception ex)
  32. {
  33. log.Info("Entered ItemHierarchyController - Initialize");
  34. log.Error(ex.Message);
  35. }
  36. }
  37. ======================================================================================================================================

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.IO;
  5. using System.Net;
  6. using System.Text;
  7. using System.Web;
  8. namespace CMS.Common
  9. {
  10. public class MyHttpClient
  11. {
  12. public string methodUrl = string.Empty;
  13. public string postStr = null;
  14. public MyHttpClient(String methodUrl)
  15. {
  16. this.methodUrl = methodUrl;
  17. }
  18. public MyHttpClient(String methodUrl, String postStr)
  19. {
  20. ///this.methodUrl = ConfigurationManager.AppSettings["ApiFrontEnd"];///http://192.168.1.6:8098/Signin/LoginApi
  21. ///this.postStr = postStr;
  22. this.methodUrl = methodUrl;
  23. this.postStr = postStr;
  24. }
  25. /// <summary>
  26. /// GET Method
  27. /// </summary>
  28. /// <returns></returns>
  29. public String ExecuteGet()
  30. {
  31. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(this.methodUrl);
  32. myRequest.Method = "GET";
  33. HttpWebResponse myResponse = null;
  34. try
  35. {
  36. myResponse = (HttpWebResponse)myRequest.GetResponse();
  37. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  38. string content = reader.ReadToEnd();
  39. return content;
  40. }
  41. //异常请求
  42. catch (WebException e)
  43. {
  44. myResponse = (HttpWebResponse)e.Response;
  45. using (Stream errData = myResponse.GetResponseStream())
  46. {
  47. using (StreamReader reader = new StreamReader(errData))
  48. {
  49. string text = reader.ReadToEnd();
  50. return text;
  51. }
  52. }
  53. }
  54. }
  55. /// <summary>
  56. /// POST Method
  57. /// </summary>
  58. /// <returns></returns>
  59. public string ExecutePost()
  60. {
  61. string content = string.Empty;
  62. Random rd = new Random();
  63. int rd_i = rd.Next();
  64. String nonce = Convert.ToString(rd_i);
  65. String timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));
  66. String signature = GetHash(this.appSecret + nonce + timestamp);
  67. try
  68. {
  69. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.methodUrl);
  70. request.Method = "POST";
  71. request.ContentType = "application/x-www-form-urlencoded";
  72. request.Headers.Add("Nonce", nonce);
  73. request.Headers.Add("Timestamp", Convert.ToString(StringProc.ConvertDateTimeInt(DateTime.Now)));
  74. request.Headers.Add("Signature", signature);
  75. request.ReadWriteTimeout = 30 * 1000;
  76. byte[] data = Encoding.UTF8.GetBytes(postStr);
  77. request.ContentLength = data.Length;
  78. Stream myRequestStream = request.GetRequestStream();
  79. myRequestStream.Write(data, 0, data.Length);
  80. myRequestStream.Close();
  81. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  82. StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  83. content = myStreamReader.ReadToEnd();
  84. myStreamReader.Close();
  85. }
  86. catch (Exception ex)
  87. {
  88. }
  89. return content;
  90. }
  91. }
  92. public class StringProc
  93. {
  94. public static String buildQueryStr(Dictionary<String, String> dicList)
  95. {
  96. String postStr = "";
  97. foreach (var item in dicList)
  98. {
  99. postStr += item.Key + "=" + HttpUtility.UrlEncode(item.Value, Encoding.UTF8) + "&";
  100. }
  101. postStr = postStr.Substring(0, postStr.LastIndexOf('&'));
  102. return postStr;
  103. }
  104. public static int ConvertDateTimeInt(System.DateTime time)
  105. {
  106. System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
  107. return (int)(time - startTime).TotalSeconds;
  108. }
  109. }
  110. }

前端调用

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using CMS.Common;
  7. using Newtonsoft.Json;
  8. namespace Medicine.Web.Controllers
  9. {
  10. public class DefaultController : Controller
  11. {
  12. public ActionResult Index()
  13. {
  14. #region DoGet
  15. string getResultJson = this.DoGet(url);
  16. HttpClientResult customerResult = (HttpClientResult)JsonConvert.DeserializeObject(getResultJson, typeof(HttpClientResult));
  17. #endregion
  18. #region DoPost
  19. string name = Request.Form["UserName"];
  20. string password = Request.Form["Password"];
  21. Dictionary<String, String> dicList = new Dictionary<String, String>();
  22. dicList.Add("UserName", name);
  23. dicList.Add("Password", password);
  24. string postStr = StringProc.buildQueryStr(dicList);
  25. string postResultJson = this.DoPost(url, postStr);
  26. HttpClientResult userResult = (HttpClientResult)JsonConvert.DeserializeObject(postResultJson, typeof(HttpClientResult));
  27. #endregion
  28. return View();
  29. }
  30. /// <summary>
  31. /// GET Method
  32. /// </summary>
  33. /// <param name="portraitUri">url地址</param>
  34. /// <returns></returns>
  35. private String DoGet(string portraitUri)
  36. {
  37. MyHttpClient client = new MyHttpClient(portraitUri);
  38. return client.ExecuteGet();
  39. }
  40. /// <summary>
  41. /// POST Method
  42. /// </summary>
  43. /// <param name="portraitUri">url地址</param>
  44. /// <param name="postStr">请求参数</param>
  45. /// <returns></returns>
  46. private String DoPost(string portraitUri, string postStr)
  47. {
  48. MyHttpClient client = new MyHttpClient(portraitUri, postStr);
  49. return client.ExecutePost();
  50. }
  51. public class HttpClientResult
  52. {
  53. public string UserName { get; set; }
  54. public bool Success { get; set; }
  55. }
  56. }
  57. }