接口请求

/// <summary>
/// 字符编码
/// </summary>
private readonly Encoding _DefaultEncoding = Encoding.UTF8;

string json = JsonHelper.ObjectToJson(requestData, true);
byte[] body = _DefaultEncoding.GetBytes(json);

//创建http请求 要访问的url地址
string requsetUrl = apiUrl + url;

//创建http请求
HttpWebRequest webRequest = CreateHttpWebRequest(requsetUrl);
webRequest.Method = "POST";
webRequest.Accept = "text/plain, application/json, application/*+json, */*";
webRequest.ContentType = "application/json; charset=utf-8";
webRequest.ContentLength = body.Length;
webRequest.Headers.Add("token", requestData.token);
using (Stream reqStream = webRequest.GetRequestStream())
{
reqStream.Write(body, 0, body.Length);
}

HttpWebResponse webResponse;
try
{
webRequest.Timeout = 300000;
//获取响应
webResponse = (HttpWebResponse)webRequest.GetResponse();
}
catch (WebException ex)
{
webResponse = (HttpWebResponse)ex.Response;
}

Stream responseStream = webResponse.GetResponseStream();
if (webResponse.ContentEncoding.ToLower().Contains("gzip"))
{
//gzip格式
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
}
string responseString = "";
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
responseString = reader.ReadToEnd();
}
if (responseString != null && responseString.Length > 0)
{
try
{
GetDeductionRequestIdResponse response = JsonHelper.JsonToObject<GetDeductionRequestIdResponse>(responseString);

//返回值

return response;
}
catch (Exception e)
{
throw new Exception("调用接口错误,没有返回值");
}
}
else
{
throw new Exception("调用接口错误,没有返回值");
}

/// <summary>
/// 创建请求
/// </summary>
/// <param name="url">地址</param>
/// <returns></returns>
private static HttpWebRequest CreateHttpWebRequest(string url)
{
HttpWebRequest request;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//ServicePointManager.DefaultConnectionLimit = 1000;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version11;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Proxy = null;
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");//若支持压缩 注意需要给在获取响应时解压
return request;
}

/// <summary>
/// https 校验证书
/// </summary>
/// <param name="sender"></param>
/// <param name="certificate"></param>
/// <param name="chain"></param>
/// <param name="errors"></param>
/// <returns></returns>
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//todo 验证对方证书
return true; //总是接受
}

/// <summary>
/// 对象转json
/// </summary>
/// <param name="obj"></param>
/// <param name="ignoreNull">忽略null值</param>
/// <returns></returns>
public static string ObjectToJson(object obj, bool ignoreNull = false)
{
//时间类型格式化
NullValueHandling nullValueHandling = NullValueHandling.Include;
if (ignoreNull == true)
{
nullValueHandling = NullValueHandling.Ignore;//忽略值为null的项
}
var jSetting = new JsonSerializerSettings { NullValueHandling = nullValueHandling };
IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss", };
jSetting.Converters.Add(dtConverter);
string json = JsonConvert.SerializeObject(obj, Formatting.Indented, jSetting);

//排序
var a = JObject.Parse(json);
var target = KeySort(a);

//去掉decimal 末尾 .0
JsonSerializerSettings s1 = new JsonSerializerSettings();
s1.Converters.Add(new DemoJson());
json = JsonConvert.SerializeObject(target, null, s1);

return json;
}

原文地址:https://www.cnblogs.com/luoxiaoxiao102/p/14822977.html