zoukankan      html  css  js  c++  java
  • C# 应用

    1. helper 类封装
    2. 调用

    1. 引用的库类

    Reference AssembliesMicrosoftFramework.NETFrameworkv4.6System.dll
        System.Net.HttpWebRequest
    

    2代码 helper 类封装

    /// <summary>
    /// REST帮助类
    /// </summary>
    public class RESTHelper
    {
        /// <summary>
        /// 不含请求参数的URL
        /// </summary>
        public string EndPoint { get; set; }
        
        /// <summary>
        /// 请求动作
        /// </summary>
        public HttpVerb Method { get; set; }
        
        /// <summary>
        /// 请求格式(application/json,text/xml,application/x-www-form-urlencoded,multipart/form-data)
        /// </summary>
        public string ContentType { get; set; }
        
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="endpoint">路径</param>
        /// <param name="method">请求动作</param>
        public RESTHelper(string endpoint, HttpVerb method)
        {
            EndPoint = endpoint;
            Method = method;
            ContentType = "application/json";
        }
        
        /// <summary>
        /// 将对象转换为json格式然后命令,一般是使用post请求
        /// </summary>
        /// <param name="jsonmodel">参数对象,不能传入string类型</param>
        /// <param name="encode">字符编码,可为null</param>
        /// <returns></returns>
        public string MakeJsonPostRequest(object jsonmodel, Encoding encode = null, WebHeaderCollection headerCollection = null)
        {
            string postData = "";
            if (jsonmodel != null)
            {
                //将对象序列化为json字符串,忽略null值
                postData = JsonConvert.SerializeObject(jsonmodel, new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" });
            }
            return MakeRequest("", postData, encode, headerCollection);
        }
        
        /// <summary>
        /// 发送请求,包含url的参数和请求数据
        /// </summary>
        /// <param name="parameters">请求参数,如page=1&page_size=20</param>
        /// <param name="postData">请求数据</param>
        /// <param name="encode">字符编码,可为null</param>
        /// <returns></returns>
        public string MakeRequest(string parameters, string postData, Encoding encode = null, WebHeaderCollection headerCollection = null)
        {
            // endpoint与请求参数拼接成完整的请求url
            string requesturlstring = EndPoint + (string.IsNullOrEmpty(parameters) ? "" : "?" + parameters);
            // 请求前记录日志
            DateTime dt = DateTime.Now;
            if (WriteLog.LoggerInstance.IsDebugEnabled) WriteLog.WriteLogger.Debug("[REST请求] 请求时间:" + dt.ToString("mm:ss.fff") + "
    URI:" + requesturlstring + "
    发送请求:" + postData);
            // 初始化http请求
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requesturlstring);
    		if (headerCollection != null)
    			request.Headers = headerCollection;
    		request.Method = Method.ToString();
            request.ContentLength = 0;
            request.ContentType = ContentType;
            request.Timeout = ConfigInfo.RESTTimeOut;
    
            //request.Credentials = new NetworkCredential("username", "password");//传入验证信息
    
            // 编码格式
            encode = encode == null ? Encoding.UTF8 : encode;
            // POST时,向流写入postData数据
            if (!string.IsNullOrEmpty(postData) && Method == HttpVerb.POST)
            {
                var bytes = encode.GetBytes(postData);
                // 设置请求数据的长度
                request.ContentLength = bytes.Length;
    
                using (var writeStream = request.GetRequestStream())
                {
                    writeStream.Write(bytes, 0, bytes.Length);
                }
            }
            
            // 返回值
            var responseValue = string.Empty;
            
            // 获取返回值
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                using (var responseStream = response.GetResponseStream())
                {
                    using (var reader = new StreamReader(responseStream, encode))
                    {
                        responseValue = reader.ReadToEnd();
                        // 记录返回结果日志
                        if (WriteLog.LoggerInstance.IsDebugEnabled) WriteLog.WriteLogger.Debug("[REST结果] 请求时间:" + dt.ToString("mm:ss.fff") + "
    URI:" + requesturlstring + "
    返回数据:" + responseValue);
    
                        return responseValue;
                    }
                }
            }
        }
        
        /// <summary>
        /// 将json字符串转换为对象(使用DataContractJsonSerializer)
        /// </summary>
        /// <param name="response"></param>
        /// <param name="dateformatstring">时间格式</param>
        /// <returns></returns>
        public T ConvertJson<T>(string response)
        {
            try
            {
                DataContractJsonSerializer Serializer = new DataContractJsonSerializer(typeof(T));
                using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(response)))
                {
                    return (T)Serializer.ReadObject(stream);
                }
            }
            catch (Exception ex)
            {
                WriteLog.WriteLogger.Error("将json字符串转换为对象出错!
    json为:" + response, ex);
                return default(T);
            }
        }
        
        /// <summary>
        /// 将json字符串转换为对象(使用Json.net)
        /// </summary>
        /// <param name="response"></param>
        /// <param name="dateformatstring">时间格式</param>
        /// <returns></returns>
        public T JsonNetConvertJson<T>(string response)
        {
        	try
        	{
        		JsonSerializerSettings jsSetting = new JsonSerializerSettings();
        		jsSetting.NullValueHandling = NullValueHandling.Ignore;
        		return JsonConvert.DeserializeObject<T>(response, jsSetting);
        		//return JsonConvert.DeserializeObject<T>(response);
        	}
        	catch (Exception ex)
        	{
        		Common.WriteLog.Error("将json字符串转换为对象出错!
    json为:" + response, ex);
        		return default(T);
        	}
        }
    }
    
    /// <summary>
    /// http请求方法/动作
    /// </summary>
    public enum HttpVerb
    {
        GET,
        POST,
        PUT,
        DELETE
    }
    

    3. 调用

    public class AClass{}
    public AClass RequestAClass(string id)
    {
        AClass entity = null;
        
        try
        {
            var uri = ConfigInfo.GetRestUri("GetAClassInfo");
    
            // 参数校验
            if (string.IsNullOrEmpty(id))
                return null;
                
            var restHelper = new RESTHelper(uri.Uri, HttpVerb.GET);
            var jsonString = restHelper.MakeRequest(id);
            entity = restHelper.ConvertJson<PrisonerInfoResponseModel>(jsonString);
        }
        catch (Exception exception) {}
     
        return entity;   
    }
    

    4. Http 系列

    4.1 发起请求

    使用 HttpWebRequest 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501036.html
    使用 WebClient 发起 Http 请求 :https://www.cnblogs.com/MichaelLoveSna/p/14501582.html
    使用 HttpClient 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501592.html
    使用 HttpClient 发起上传文件、下载文件请求:https://www.cnblogs.com/MichaelLoveSna/p/14501603.html

    4.2 接受请求

    使用 HttpListener 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501628.html
    使用 WepApp 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501612.html
    使用 WepApp 处理文件上传、下载请求:https://www.cnblogs.com/MichaelLoveSna/p/14501616.html

  • 相关阅读:
    日报 18/06/21
    collection
    日报 18/06/20
    getTickCount()函数 VS GetTickCount()函数
    临时变量不能作为非const类型引用形参的实参
    关于Char类型数据做cout输出
    静态局部变量、静态全局变量、extern全局变量、自动变量 札记
    cvKMeans2函数用法概述
    操作系统 庞丽萍 第五章
    操作系统 庞丽萍 第四章
  • 原文地址:https://www.cnblogs.com/MichaelLoveSna/p/14501036.html
Copyright © 2011-2022 走看看