zoukankan      html  css  js  c++  java
  • C# 调用API接口处理公共类 自带JSON实体互转类

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    
    namespace AirMedia.Wap.Core
    {
        public static class HttpWebHelper
        {
            /// <SUMMARY>  
            /// httpwebrequest类中的一些属性的集合  
            /// </SUMMARY>  
            public class RequestParam
            {
                /// <SUMMARY>  
                /// 获取或设置request类中的Accept属性  
                /// 用以设置接受的文件类型  
                /// </SUMMARY>              
                public string Accept { get; set; }
    
                /// <SUMMARY>  
                /// 获取或设置request类中的ContentType属性  
                /// 用以设置请求的媒体类型  
                /// </SUMMARY>            
                public string ContentType { get; set; }
    
                /// <SUMMARY>  
                /// 获取或设置request类中的UserAgent属性  
                /// 用以设置请求的client信息  
                /// </SUMMARY>  
                public string UserAgent { get; set; }
    
                /// <SUMMARY>  
                /// 获取或设置request类中的Method属性  
                /// 能够将 Method 属性设置为不论什么 HTTP 1.1 协议谓词:GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS。

    /// 假设 ContentLength 属性被设置为 -1 以外的不论什么值。则必须将 Method 属性设置为上载数据的协议属性。

    /// </SUMMARY> public string Method { get; set; } /// <summary> /// 发送的数据 /// </summary> public byte[] PostData { get; set; } } /// <SUMMARY> /// 构建一个httt请求以获取目标链接的cookies,须要传入目标的登录地址和相关的post信息,返回完毕登录的cookies,以及返回的html内容 /// </SUMMARY> /// <PARAM name="url">登录页面的地址</PARAM> /// <PARAM name="post">post信息</PARAM> /// <PARAM name="strHtml">输出的html代码</PARAM> /// <PARAM name="rppt">请求的标头所须要的相关属性设置</PARAM> /// <RETURNS>请求完毕后的cookies</RETURNS> public static CookieCollection GetCookie(string url, RequestParam rppt, out string strHtml) { CookieCollection ckclReturn = new CookieCollection(); CookieContainer cc = new CookieContainer(); HttpWebRequest hwRequest; HttpWebResponse hwResponse; Stream stream; hwRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); hwRequest.CookieContainer = cc; if (rppt != null) { hwRequest.Accept = rppt.Accept; hwRequest.ContentType = rppt.ContentType; hwRequest.UserAgent = rppt.UserAgent; hwRequest.Method = rppt.Method; hwRequest.ContentLength = rppt.PostData.Length; //写入标头 stream = hwRequest.GetRequestStream(); stream.Write(rppt.PostData, 0, rppt.PostData.Length); stream.Close(); } //发送请求获取响应内容 try { hwResponse = (HttpWebResponse)hwRequest.GetResponse(); } catch { strHtml = ""; return ckclReturn; } stream = hwResponse.GetResponseStream(); StreamReader sReader = new StreamReader(stream, Encoding.UTF8); strHtml = sReader.ReadToEnd(); sReader.Close(); stream.Close(); //获取缓存内容 ckclReturn = hwResponse.Cookies; return ckclReturn; } /// <SUMMARY> /// 依据已经获取的有效cookies来获取目标链接的内容 /// </SUMMARY> /// <PARAM name="strUri">目标链接的url</PARAM> ///<PARAM name="post">post的byte信息</PARAM> /// <PARAM name="ccl">已经获取到的有效cookies</PARAM> /// <PARAM name="rppt">头属性的相关设置</PARAM> /// <RETURNS>目标连接的纯文本:"txt/html"</RETURNS> public static string GetHtmlByCookies(string strUri, byte[] post, CookieCollection ccl, RequestParam rppt) { CookieContainer cc = new CookieContainer(); HttpWebRequest hwRequest; HttpWebResponse hwResponse; //构建即将发送的包头 hwRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(strUri)); cc.Add(ccl); hwRequest.CookieContainer = cc; hwRequest.Accept = rppt.Accept; hwRequest.ContentType = rppt.ContentType; hwRequest.UserAgent = rppt.UserAgent; hwRequest.Method = rppt.Method; hwRequest.ContentLength = post.Length; //写入post信息 Stream stream; stream = hwRequest.GetRequestStream(); stream.Write(post, 0, post.Length); stream.Close(); //发送请求获取响应内容 try { hwResponse = (HttpWebResponse)hwRequest.GetResponse(); } catch { return ""; } stream = hwResponse.GetResponseStream(); StreamReader sReader = new StreamReader(stream, Encoding.Default); string strHtml = sReader.ReadToEnd(); sReader.Close(); stream.Close(); //返回值 return strHtml; } /// <summary> /// 依据泛型来构建字符串用于post /// </summary> /// <param name="dir">带有键值对的泛型</param> /// <returns>构建完毕的字符串</returns> public static byte[] CreatePostData(Dictionary<string, string> dir) { StringBuilder strPost = new StringBuilder(); foreach (KeyValuePair<string, string> kvp in dir) { strPost.Append(kvp.Key); strPost.Append('='); if (!string.IsNullOrWhiteSpace(kvp.Value)) { strPost.Append(System.Web.HttpUtility.UrlEncode(kvp.Value)); } strPost.Append('&'); } return CreatePostData(strPost.ToString().TrimEnd('&')); } public static byte[] CreatePostData(string input) { return Encoding.Default.GetBytes(input); } /// <summary> /// 向指定uri发起GET请求 /// </summary> /// <param name="uri"></param> /// <param name="request"></param> /// <returns></returns> public static string GET(string url) { WebClient wc = new WebClient(); wc.Encoding = System.Text.Encoding.UTF8; string s = wc.DownloadString(url); s = HttpUtility.UrlDecode(s); return s; } } /// <summary> /// 有关HTTP请求的辅助类 /// </summary> public class HttpWebResponseUtility { private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; /// <summary> /// 创建GET方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的client浏览器信息。能够为空</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,假设不须要身份验证能够为空</param> /// <returns></returns> public static HttpWebResponse CreateGetHttpResponse(string url, IDictionary<string, string> parameters, int?

    timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } StringBuilder buffer = new StringBuilder(); if (!(parameters == null || parameters.Count == 0)) { int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); } i++; } } if (buffer.Length > 1) { url = url + "?

    " + buffer.ToString(); } url = HttpUtility.UrlDecode(url); HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "GET"; request.UserAgent = DefaultUserAgent; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } return request.GetResponse() as HttpWebResponse; } /// <summary> /// 创建POST方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="parameters">随同请求POST的參数名称及參数值字典</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的client浏览器信息。能够为空</param> /// <param name="requestEncoding">发送HTTP请求时所用的编码</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,假设不须要身份验证能够为空</param> /// <returns></returns> public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (requestEncoding == null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request = null; //假设是发送HTTPS请求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; // request.ContentType = "application/x-www-form-urlencoded"; request.ContentType = "application/json"; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } else { request.UserAgent = DefaultUserAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } //假设须要POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); } i++; } byte[] data = requestEncoding.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } return request.GetResponse() as HttpWebResponse; } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //总是接受 } public static string PostXml(string url, string xml) { byte[] bytes = Encoding.UTF8.GetBytes(xml); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentLength = bytes.Length; request.ContentType = "text/xml"; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(bytes, 0, bytes.Length); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode != HttpStatusCode.OK) { string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode); throw new ApplicationException(message); } System.IO.StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8")); string res = sr.ReadToEnd(); sr.Close(); response.Close(); return res; } } }


    调用

    string requestUrl = CoreInterface.ApiDomain + "api/Login/AddQRLog?

    grid={0}&ad={1}&grName={2}&vc={3}&br={4}&sc={5}&ts={6}&ps={7}"; requestUrl = string.Format(requestUrl, grid, ad, grName, vc, br, sc, ts, ps); string resultJson = ""; //try //{ HttpWebResponse response = HttpWebResponseUtility.CreateGetHttpResponse(requestUrl, null, 1000000, "", null, null); System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()); resultJson = sr.ReadToEnd(); sr.Close(); //} //catch (Exception) //{ // return RedirectToAction("Index", "Error"); //}


     

    C# 自带JSON转换类

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.Serialization.Json;
    
    namespace AirMedia.Wap.Core
    {
        public static class JsonHelper
        {
            #region DataContractJsonSerializer
    
            /// <summary>
            /// 对象转换成json
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="jsonObject">须要格式化的对象</param>
            /// <returns>Json字符串</returns>
            public static string DataContractJsonSerialize<T>(T jsonObject)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                string json = null;
                using (MemoryStream ms = new MemoryStream()) //定义一个stream用来存发序列化之后的内容
                {
                    serializer.WriteObject(ms, jsonObject);
                    json = Encoding.UTF8.GetString(ms.GetBuffer()); //将stream读取成一个字符串形式的数据。而且返回
                    ms.Close();
                }
                return json;
            }
    
            /// <summary>
            /// json字符串转换成对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="json">要转换成对象的json字符串</param>
            /// <returns></returns>
            public static T DataContractJsonDeserialize<T>(string json)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                T obj = default(T);
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
                {
                    obj = (T)serializer.ReadObject(ms);
                    ms.Close();
                }
                return obj;
            }
    
            #endregion
        }
    }
    


     

    /// <summary>
            /// 时间戳
            /// </summary>
            public static string TS
            {
                get
                {
                    DateTime dt = new DateTime(1970, 1, 1);
                    TimeSpan d = DateTime.Now - dt;
                    long seconddiff = d.Ticks / 10000000;
                    return seconddiff.ToString();
                }
            }

            /// <summary>
            /// md5加密
            /// </summary>
            /// <param name="strText"></param>
            /// <returns></returns>
            public static string MD5Encrypt(string strText)
            {
                return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strText, "MD5");
            }

  • 相关阅读:
    一个web程序员的年终总结
    编程要诀-心态
    初识vps,域名与购买,初步配置
    一个好的学习方法真的很重要——费曼学习法
    [译]C# 7系列,Part 8: in Parameters in参数
    Dalsa 8K彩色相机Camera link C#采图
    精简Command版SqlHelper
    ASP.NET MVC模块化开发——动态挂载外部项目
    net core WebApi——依赖注入Autofac
    .NET Core 3 WPF MVVM框架 Prism系列之命令
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6788967.html
Copyright © 2011-2022 走看看