建立请求,以模拟远程HTTP的POST请求方式构造并获取处理结果
1 /// <summary> 2 /// 建立请求,以模拟远程HTTP的POST请求方式构造并获取处理结果 3 /// </summary> 4 /// <param name="sParaTemp">请求参数数组</param> 5 /// <returns>处理结果</returns> 6 public string BuildRequest(Dictionary<string, string> sParaTemp,string url,string input_chartset) 7 { 8 Encoding code = Encoding.GetEncoding(input_chartset); 9 10 //待请求参数数组字符串 11 string strRequestData = BuildRequestParaToString(sParaTemp, code); 12 13 //把数组转换成流中所需字节数组类型 14 byte[] bytesRequestData = code.GetBytes(strRequestData); 15 16 //构造请求地址 17 string strUrl = url; 18 19 //请求远程HTTP 20 string strResult = ""; 21 try 22 { 23 //设置HttpWebRequest基本信息 24 HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl); 25 myReq.Method = "post"; 26 myReq.ContentType = "application/x-www-form-urlencoded"; 27 28 //填充POST数据 29 myReq.ContentLength = bytesRequestData.Length; 30 Stream requestStream = myReq.GetRequestStream(); 31 requestStream.Write(bytesRequestData, 0, bytesRequestData.Length); 32 requestStream.Close(); 33 34 //发送POST数据请求服务器 35 HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse(); 36 Stream myStream = HttpWResp.GetResponseStream(); 37 38 //获取服务器返回信息 39 StreamReader reader = new StreamReader(myStream, code); 40 StringBuilder responseData = new StringBuilder(); 41 String line; 42 while ((line = reader.ReadLine()) != null) 43 { 44 responseData.Append(line); 45 } 46 47 //释放 48 myStream.Close(); 49 50 strResult = responseData.ToString(); 51 } 52 catch (Exception exp) 53 { 54 strResult = "报错:" + exp.Message; 55 } 56 57 return strResult; 58 } 59 60 /// <summary> 61 /// 生成要请求的参数数组 62 /// </summary> 63 /// <param name="sParaTemp">请求前的参数数组</param> 64 /// <param name="code">字符编码</param> 65 /// <returns>要请求的参数数组字符串</returns> 66 private string BuildRequestParaToString(Dictionary<string, string> sParaTemp, Encoding code) 67 { 68 //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode 69 string strRequestData = CreateLinkStringUrlencode(sParaTemp, code); 70 return strRequestData; 71 } 72 73 /// <summary> 74 /// 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode 75 /// </summary> 76 /// <param name="sArray">需要拼接的数组</param> 77 /// <param name="code">字符编码</param> 78 /// <returns>拼接完成以后的字符串</returns> 79 private string CreateLinkStringUrlencode(Dictionary<string, string> dicArray, Encoding code) 80 { 81 StringBuilder prestr = new StringBuilder(); 82 foreach (KeyValuePair<string, string> temp in dicArray) 83 { 84 prestr.Append(temp.Key + "=" + HttpUtility.UrlEncode(temp.Value, code) + "&"); 85 } 86 87 //去掉最後一個&字符 88 int nLen = prestr.Length; 89 prestr.Remove(nLen - 1, 1); 90 91 return prestr.ToString(); 92 }
调用
1 /// <summary> 2 /// 查询电子邮件状态 3 /// </summary> 4 /// <returns></returns> 5 [HttpPost] 6 public ActionResult QueryEmailStatus() 7 { 8 string responseText = string.Empty; 9 try 10 { 11 #region 调用查询电子邮件状态接口 12 13 string url = "http://localhost/WebAPI/status.aspx"; 14 string input_chartset="utf-8"; 15 //构造参数 16 Dictionary<string, string> sParaTemp = new Dictionary<string, string>(); 17 sParaTemp.Add("ManagerLoginName", "XXXXXXX");//API帳號 18 sParaTemp.Add("ManagerPassword", "XXXXXXX");//API密碼 19 20 sParaTemp.Add("JobType", "2");//1:簡訊 2:電子郵件 21 sParaTemp.Add("LaunchID", "100");//任務編號 22 sParaTemp.Add("EmailAddress", "394401333@qq.com");//查詢的對象(收件者信箱) 23 24 //提交请求,获得返回结果 25 responseText = BuildRequest(sParaTemp, url, input_chartset); 26 27 #endregion 28 } 29 catch (Exception ex) 30 { 31 throw ex; 32 //Log.Error(this.GetType().ToString(), "Exception: " + ex.Message); 33 } 34 return RedirectToAction("Index", "Demo"); 35 }