======================================================================================================================================
///
/// 日期:2016-2-4
/// 备注:bug已修改,可以使用
///
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 dicList = new Dictionary();
dicList.Add("UserName", "[email protected]");
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;
}
///
/// GET Method
///
///
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;
}
}
}
}
///
/// POST Method
///
///
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 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 dicList = new Dictionary();
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();
}
///
/// GET Method
///
/// url地址
///
private String DoGet(string portraitUri)
{
MyHttpClient client = new MyHttpClient(portraitUri);
return client.ExecuteGet();
}
///
/// POST Method
///
/// url地址
/// 请求参数
///
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; }
}
}
}
HttpClient
var responseString = string.Empty;
using (var client = new HttpClient())
{
var values = new Dictionary
{
{ "apikey", apiKey },
{ "mobile", phoneNumber },
{ "text", smsMessage }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync(url, content);
responseString = await response.Content.ReadAsStringAsync();
}
.net framework 3.5 版本,遇见“基础连接已关闭”的问题,尝试如下方法:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768;
或
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
微软官方文档说明:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.securityprotocoltype?view=netframework-4.7.2