小编最近遇到了一个调用车辆违章的数据,也就是要调用其他相关机构Api接口,由于小编之前未接触过此类的编码,这个活可真是苦了小编,但小编想啊,如果可以把这个搞定,小编的技术就能再次进阶了,于是小编就开始疯狂的尝试,看了调用Api的接口也使用了,但是最后以屡屡失败告终,小编后来还联系了Api官网的技术服务人员,最后竟也没有搞定,于是乎看了一下师傅的逻辑,咦~~,你猜怎么着,灵感biu的一下就触不及防的出现在了我的脑海!…还是自己家的师傅靠谱啊,小编一定要记住恩师的好,不过也看到了自己的缺点呢,小编的C#根基也需要再努力巩固才行,啰嗦了一大堆,可都是心里话啊,来看代码吧!
这是官方C#调用接口的方法(属于我没有成功的那一块)
//using System.IO;
//using System.Text;
//using System.Net;
//using System.Net.Security;
//using System.Security.Cryptography.X509Certificates;
private const String host = "https://jisuqgclwz.market.alicloudapi.com";
private const String path = "/illegal/query";
private const String method = "GET";
private const String appcode = "你自己的AppCode";
static void Main(string[] args)
{
String querys = "carorg=hangzhou&engineno=123456&frameno=229561&iscity=0&lsnum=AH5b57&lsprefix=%E6%B5%99&lstype=02&mobile=mobile";
String bodys = "";
String url = host + path;
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
if (0 < querys.Length)
{
url = url + "?" + querys;
}
if (host.Contains("https://"))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
}
else
{
httpRequest = (HttpWebRequest)WebRequest.Create(url);
}
httpRequest.Method = method;
httpRequest.Headers.Add("Authorization", "APPCODE " + appcode);
if (0 < bodys.Length)
{
byte[] data = Encoding.UTF8.GetBytes(bodys);
using (Stream stream = httpRequest.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
try
{
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
}
catch (WebException ex)
{
httpResponse = (HttpWebResponse)ex.Response;
}
Console.WriteLine(httpResponse.StatusCode);
Console.WriteLine(httpResponse.Method);
Console.WriteLine(httpResponse.Headers);
Stream st = httpResponse.GetResponseStream();
StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
Console.WriteLine(reader.ReadToEnd());
Console.WriteLine("\n");
}
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
这便是小编的恩师和小编结合后的代码了
public void ProcessRequest(HttpContext context)
{
string type = context.Request["type"].ToString();
if (type.ToLower() == "querycarviolatedata")
{
string result = string.Empty;
CarEntity carentity = new CarEntity();
carentity.CurCity = context.Request["CurCity"].ToString();
carentity.CarNum = context.Request["CarNum"].ToString();
carentity.EngineNum = context.Request["EngineNum"].ToString();
carentity.VINNum = context.Request["VINNum"].ToString();
carentity.CarNum = context.Request["CarNum"].ToString();
string appCode = "你自己的APPCODE";
string aliyun = "https://jisuqgclwz.market.alicloudapi.com/illegal/query";
String querys = "carorg" + carentity.CurCity + "=&engineno=" + carentity.EngineNum + "&frameno=" + carentity.VINNum + "&iscity=1&lsnum=" + carentity.CarNum.Substring(1, carentity.CarNum.Length - 1) + "&lsprefix=" + HttpUtility.UrlEncode(carentity.CarNum.Substring(0, 1)) + "&lstype=&mobile=";
string url = aliyun + "?" + querys;
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
if (aliyun.Contains("https://"))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
}
else
{
httpRequest = (HttpWebRequest)WebRequest.Create(url);
}
httpRequest.Method = "GET";
httpRequest.Headers.Add("Authorization", "APPCODE " + appCode);
try
{
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
}
catch (WebException ex)
{
WriteTextLog("车牌:" + carentity.CarNum + "查询违章有误:" + ex.Message, DateTime.Now);
return;
}
using (Stream st = httpResponse.GetResponseStream())
{
using (StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8")))
{
result = reader.ReadToEnd();
}
}
ArrayList rows = (ArrayList)JSON.Decode("[" + result + "]");
Console.WriteLine(rows);
}
}
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
小编这个代码并不完全,但是当小伙伴们将值传入方法中加入断点一直运行到result = reader.ReadToEnd();时,就可以看到接收过来的值了(最重要的),而后面的代码就需要根据需求来了