最近用C#做完了一个项目,分享一个良心技术博客。
第一章:C#如何拿到从http上返回JSON数据?
第二章:C#如何解析JSON数据?(反序列化对象)
第三章:C#如何生成JSON字符串?(序列化对象)
第四章:C#如何生成JSON字符串提交给接口(服务器)
在这个可用的HttpUitls工具类的基础上,老陌补充了几行(authorization+验证证书),亲测可用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Web;
using System.Windows.Forms;
namespace Test
{
class HttpUitls
{
public static string Get(string Url)
{
// System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
//System.GC.Collect();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Proxy = null;
request.KeepAlive = false;
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
request.AutomaticDecompression = DecompressionMethods.GZip;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
return false;
}
public static string Post(string Url, string Data, string Referer)
{
//添加验证证书的回调方法
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.Referer = Referer;
byte[] bytes = Encoding.UTF8.GetBytes(Data);
request.ContentType = "application/json";
// request.ContentType ="application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
//Add authorization
string username = "username";
string password = "password";
//注意这里的格式为 "username:password"
string usernamePassword = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(Url), "Basic", new NetworkCredential(username, password));
request.Credentials = mycache;
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
X509Certificate cerBook = new X509Certificate(Application.StartupPath+@"\mycert.pfx", "password"); //證書放在exe同一路徑
request.ClientCertificates.Add(cerBook);
Stream myResponseStream = request.GetRequestStream();
myResponseStream.Write(bytes, 0, bytes.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
}
}
另,分享一个JSON转换C#实体类的工具:JSON转C#实体类-BeJSON.com