分享

Http调用API

 修行的嘟嘟 2015-01-22
using Ets.GroupCallCenter.Model;
using Ets.GroupCallCenter.Model.Controllers.Groupon;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace Ets.GroupCallCenter.Groupon.Services
{
    public class Api
    {
        /// <summary>
        /// Post方式调用API.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objParam">参数集合.</param>
        /// <param name="apiUrl">API地址.</param>
        /// <param name="type">返回数据类型.</param>
        /// <returns></returns>
        /// 创建者:王宇
        /// 创建日期:1/21/2015 3:41 PM
        /// 修改者:
        /// 修改时间:
        /// ------------------------------------
        public static object InvokingApiPost<T>(object objParam, string apiUrl, ResultModeType type)
        {
            string url = ConfigurationManager.AppSettings["InvokingApiUrl"] + apiUrl;
            Type t = objParam.GetType();
            string param = JsonHelper.GetJson<object>(objParam);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(param);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = bs.Length;
            ApiServiceResult<T> resultResult = new ApiServiceResult<T>();

            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(bs, 0, bs.Length);
            }
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
                string res = sr.ReadToEnd();
                sr.Close();
                response.Close();
                JObject json = JObject.Parse(res);
                resultResult.Code = json["MessageCode"] == null ? "" : json["MessageCode"].ToString();
                resultResult.Message = json["Message"] == null ? "" : json["Message"].ToString();
                string result = json["Result"] == null ? "" : json["Result"].ToString();
                if (type == ResultModeType.Single)
                {
                    if (!string.IsNullOrEmpty(result))
                        resultResult.Result = JsonHelper.FromJson<T>(result);
                }
                else
                {
                    if (!string.IsNullOrEmpty(result))
                        resultResult.ResultList = JsonHelper.JsonStringToList<T>(json["Result"] == null ? "" : json["Result"].ToString());
                }
                return resultResult;
            }
            catch (WebException ex)
            {
                resultResult.Code = "-1";
                resultResult.Message = ex.Message;
                return resultResult;
            }
            catch (Exception ex)
            {
                resultResult.Code = "-1";
                resultResult.Message = ex.Message;
                return resultResult;
            }
        }

        /// <summary>
        /// Get方式调用API.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url">URL地址.</param>
        /// <param name="type">返回数据类型.</param>
        /// <returns></returns>
        /// 创建者:王宇
        /// 创建日期:1/21/2015 3:41 PM
        /// 修改者:
        /// 修改时间:
        /// ------------------------------------
        public static object InvokingApiGet<T>(string url, ResultModeType type)
        {
            url = ConfigurationManager.AppSettings["InvokingApiUrl"] + url;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Timeout = 1000 * 60 * 15;
            request.Method = "GET";
            HttpWebResponse response = null;
            string returnValue = string.Empty;
            ApiServiceResult<T> resultResult = new ApiServiceResult<T>();
            try
            {
                response = (HttpWebResponse)request.GetResponse();
                System.IO.StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
                returnValue = sr.ReadToEnd();
                sr.Close();
                response.Close();
                JObject json = JObject.Parse(returnValue);
                resultResult.Code = json["MessageCode"] == null ? "" : json["MessageCode"].ToString();
                resultResult.Message = json["Message"] == null ? "" : json["Message"].ToString();
                string strs = json["Result"] == null ? "" : json["Result"].ToString();
                if (type == ResultModeType.Single)
                {
                    if (!string.IsNullOrEmpty(strs))
                        resultResult.Result = JsonHelper.FromJson<T>(strs);
                }
                else
                {
                    if (!string.IsNullOrEmpty(strs))
                        resultResult.ResultList = JsonHelper.JsonStringToList<T>(strs);
                }
                return resultResult;
            }
            catch (System.Net.WebException ex)
            {
                resultResult.Code = "-1";
                resultResult.Message = ex.Message;
                return resultResult;
            }
            catch (Exception ex)
            {
                resultResult.Code = "-1";
                resultResult.Message = ex.Message;
                return resultResult;
            }
        }
    }

    /// <summary>
    /// 返回实体类型,集合或者非集合
    /// </summary>
    /// 创建者:王宇
    /// 创建日期:1/21/2015 3:38 PM
    /// 修改者:
    /// 修改时间:
    /// ------------------------------------
    public enum ResultModeType
    {
        /// <summary>
        /// 单个实体模式
        /// </summary>
        Single,
        /// <summary>
        /// 列表模式
        /// </summary>
        List
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多