C# 调用Web Service

 

public class ApiHelper
    {
        /// <summary>
        /// 调用api返回json
        /// </summary>
        /// <param name="url">api地址</param>
        /// <param name="jsonstr">接收参数</param>
        /// <param name="type">类型</param>
        /// <param name="authorization">身份校验</param>
        /// <returns></returns>
        public static ResponseBean<T> HttpPost<T>(string url, string jsonstr ,string authorization = "") where T : class
        {
            ResponseBean<T> resultModel = null;
            try
            {
                string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
                Encoding encoding = Encoding.UTF8;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddress + url);//webrequest请求api地址
                request.Accept = "text/html,application/xhtml+xml,*/*";
                request.ContentType = "application/json";
                request.Method = "POST";
                if (!string.IsNullOrEmpty(authorization))
                {
                    request.Headers.Add("Authorization", authorization);
                }
                byte[] buffer = encoding.GetBytes(jsonstr);
                request.ContentLength = buffer.Length;
                request.GetRequestStream().Write(buffer, 0, buffer.Length);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    string result = reader.ReadToEnd();
                    resultModel = Common.StrToObject<ResponseBean<T>>(result);
                    if (resultModel != null)
                    {
                        // Header
                        if (response.Headers.AllKeys != null && response.Headers.AllKeys.ToList().Contains("Authorization"))
                        {
                            resultModel.Authorization = response.Headers.GetValues("Authorization")[0];
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // 过期
                if (ex.Message.Contains("(401) 未经授权"))
                {
                    return new ResponseBean<T>() { code = Constant.UNAUTHORIZED_CODE, msg = ex.Message };
                }
                return new ResponseBean<T>() { code = Constant.REQUEST_ERROR_CODE, msg = "程序出错"};
            }
            return resultModel;
        }

        /// <summary>
        /// GET方法
        /// </summary>
        /// <param name="url"></param>
        /// <param name="getDataStr"></param>
        /// <param name="authorization"></param>
        /// <returns></returns>
        public static ResponseBean<T> HttpGet<T>(string url, string paramStr, string authorization = "") where T : class
        {
            ResponseBean<T> resultModel = null;
            try
            {
                string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddress + url + (paramStr == "" ? "" : "?") + paramStr);
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
                if (!string.IsNullOrEmpty(authorization))
                {
                    request.Headers.Add("Authorization", authorization);
                }
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                resultModel = Common.StringToObject<ResponseBean<T>>(retString);
                if (resultModel != null)
                {
                    // Header
                    if (response.Headers.AllKeys != null && response.Headers.AllKeys.ToList().Contains("Authorization"))
                    {
                        resultModel.Authorization = response.Headers.GetValues("Authorization")[0];
                    }
                }
            }
            catch (Exception ex)
            {
                // 过期
                if (ex.Message.Contains("(401) 未经授权"))
                {
                    return new ResponseBean<T>() { code = Constant.UNAUTHORIZED_CODE, msg = ex.Message };
                }
                return new ResponseBean<T>() { code = Constant.REQUEST_ERROR_CODE, msg = ex.Message };
            }
            return resultModel;
        }

        /// <summary>
        /// GET Image方法
        /// </summary>
        /// <param name="url"></param>
        /// <param name="getDataStr"></param>
        /// <param name="authorization"></param>
        /// <returns></returns>
        public static Stream HttpGetImage(string url, string paramStr, string authorization = "")
        {
            try
            {
                string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddress + url + (paramStr == "" ? "" : "?") + paramStr);
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
                if (!string.IsNullOrEmpty(authorization))
                {
                    request.Headers.Add("Authorization", authorization);
                }
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //response.ContentType = "image/jpg";
                Stream myResponseStream = response.GetResponseStream();
                //myResponseStream.Close();
                return myResponseStream;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postDataStr"></param>
        /// <param name="authorization"></param>
        /// <returns></returns>
        public static ResponseBean<T> UploadImage<T>(string url, string filePath, string authorization = "") where T : class
        {
            ResponseBean<T> resultModel = null;
            try
            {
                string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
                // 调用接口上传文件
                using (var client = new HttpClient())
                {
                    using (var multipartFormDataContent = new MultipartFormDataContent())
                    {
                        //var values = new[]
                        //{
                        //    new KeyValuePair<string, string>("a", "3"),
                        //    new KeyValuePair<string, string>("c", "2"),
                        //    new KeyValuePair<string, string>("d", "2")
                        //     //other values
                        //};

                        //foreach (var keyValuePair in values)
                        //{
                        //    multipartFormDataContent.Add(new StringContent(keyValuePair.Value),
                        //        String.Format("\"{0}\"", keyValuePair.Key));
                        //}
                        client.DefaultRequestHeaders.Add("Authorization", authorization);
                        var fileContent = new ByteArrayContent(File.ReadAllBytes(filePath));
                        multipartFormDataContent.Add(fileContent,
                            "file",
                           new FileInfo(filePath).Name);
                        var html = client.PostAsync(webAddress + url, multipartFormDataContent).Result.Content.ReadAsStringAsync().Result;
                        resultModel = Common.StringToObject<ResponseBean<T>>(html);
                    }
                }
            }
            catch (Exception ex)
            {
                // 过期
                if (ex.Message.Contains("(401) 未经授权"))
                {
                    return new ResponseBean<T>() { code = Constant.UNAUTHORIZED_CODE, msg = ex.Message };
                }
                return new ResponseBean<T>() { code = 500, msg = ex.Message };
            }
            return resultModel;
        }
    }
    public class ResponseBean<T> where T : class
    {
        /// <summary>
        /// HTTP状态码
        /// </summary>
        public int code { get; set; }
        /// <summary>
        /// 返回信息
        /// </summary>
        public string msg { get; set; }
        /// <summary>
        /// 返回的数据
        /// </summary>
        public T data { get; set; }

        /// <summary>
        /// 验证Token
        /// </summary>
        public string Authorization { get; set; }
    }

 

posted @ 2021-05-11 14:05  沙漠狼  阅读(90)  评论(0)    收藏  举报