zoukankan      html  css  js  c++  java
  • 利用HttpWebRequest访问WebApi

        WebApi现在越来越流行,下面给出利用HttpWebRequest访问WebApi的工具方法:

        1、利用基准URL和参数字典生成完整URL

            /// <summary>
            /// 生成URL字符串
            /// </summary>
            /// <param name="baseUrl">基准URL</param>
            /// <param name="dictParam">参数字典</param>
            /// <returns>最终URL字符串</returns>
            public static string GetUrl(string baseUrl, Dictionary<string, string> dictParam)
            {
                if (string.IsNullOrWhiteSpace(baseUrl))
                {
                    throw new ArgumentNullException("baseUrl", "基准URL不能为空");
                }
                StringBuilder sbParam = new StringBuilder();
                string strParam = string.Empty;
                if (dictParam != null && dictParam.Count > 0)
                {
                    sbParam.Append("?");
                    foreach (KeyValuePair<string, string> item in dictParam)
                    {
                        sbParam.Append(string.Format("{0}={1}&", item.Key, HttpUtility.UrlEncode(item.Value, Encoding.UTF8)));
                    }
                    strParam = sbParam.ToString();
                    strParam = strParam.Substring(0, strParam.Length - 1);
                }
                string strUrl = string.Format("{0}{1}", baseUrl, strParam);
                return strUrl;
            }
    View Code

        2、通过HTTP请求获取数据(参数为非model类型)

            /// <summary>
            /// 通过http请求获取数据(参数为非model类型)
            /// </summary>
            /// <param name="url">获取数据的url</param>
            /// <param name="requestMethod">请求方法:GET/POST/PUT/DELETE</param>
            /// <param name="jsonData">返回的json数据</param>
            /// <param name="errMsg">错误信息</param>
            /// <returns>true:成功 false:失败</returns>
            public static bool RequestHttpData(string url, string requestMethod, out string jsonData, out string errMsg)
            {
                jsonData = string.Empty;
                errMsg = string.Empty;
                string result = string.Empty;
                try
                {
                    //创建请求
                    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                    request.Timeout = 15 * 60 * 1000; //15分钟
                    request.Method = requestMethod;
                    request.KeepAlive = true;
                    request.AllowAutoRedirect = false;
                    //获取数据
                    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                    {
                        StreamReader sr = new StreamReader(response.GetResponseStream());
                        result = sr.ReadToEnd();
                    }
                }
                catch (WebException ex)
                {
                    try
                    {
                        WebResponse wr = ex.Response;
                        Stream st = wr.GetResponseStream();
                        StreamReader sr = new StreamReader(st, System.Text.Encoding.Default);
                        string tmpErr = sr.ReadToEnd();
                        Regex r = new Regex(@"<body><h1>.*</h1>");
                        errMsg = r.Match(tmpErr).Value.Replace("<body><h1>", "").Replace("</h1>", "");
                        sr.Close();
                        st.Close();
                    }
                    catch
                    {
                        errMsg = ex.Message;
                    }
                    return false;
                }
                catch (Exception ex)
                {
                    errMsg = ex.Message;
                    return false;
                }
                if (!string.IsNullOrWhiteSpace(result))
                {
                    jsonData = result;
                }
                return true;
            }
    View Code

        3、通过HTTP请求获取数据(参数为model类型)

            /// <summary>
            /// 通过http请求传递数据(参数为model类型)
            /// </summary>
            /// <param name="url">传递数据的url</param>
            /// <param name="paraJson">要传递的Json数据</param>
            /// <param name="requestMethod">请求方法:GET/POST/PUT/DELETE</param>
            /// <param name="jsonData">返回的json数据</param>
            /// <param name="errMsg">错误信息</param>
            /// <returns>true:成功 false:失败</returns>
            public static bool RequestHttpData(string url, string paraJson, string requestMethod, out string jsonData, out string errMsg)
            {
                jsonData = string.Empty;
                errMsg = string.Empty;
                string result = string.Empty;
                try
                {
                    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                    request.Timeout = 15 * 60 * 1000; //15分钟
                    request.Method = requestMethod;
                    request.KeepAlive = true;
                    request.AllowAutoRedirect = false;
                    request.ContentType = "application/json";
                    byte[] postdatabtyes = Encoding.UTF8.GetBytes(paraJson);
                    request.ContentLength = postdatabtyes.Length;
                    Stream requeststream = request.GetRequestStream();
                    requeststream.Write(postdatabtyes, 0, postdatabtyes.Length);
                    requeststream.Close();
                    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                    {
                        StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                        result = sr.ReadToEnd();
                    }
    
                }
                catch (WebException ex)
                {
                    try
                    {
                        WebResponse wr = ex.Response;
                        Stream st = wr.GetResponseStream();
                        StreamReader sr = new StreamReader(st, System.Text.Encoding.Default);
                        string tmpErr = sr.ReadToEnd();
                        Regex r = new Regex(@"<body><h1>.*</h1>");
                        errMsg = r.Match(tmpErr).Value.Replace("<body><h1>", "").Replace("</h1>", "");
                        sr.Close();
                        st.Close();
                    }
                    catch
                    {
                        errMsg = ex.Message;
                    }
                    return false;
                }
                catch (Exception ex)
                {
                    errMsg = ex.Message;
                    return false;
                }
                if (!string.IsNullOrWhiteSpace(result))
                {
                    jsonData = result;
                }
                return true;
            }
    View Code
  • 相关阅读:
    vscode圣诞帽
    阿里java代码检测工具p3c
    elasticsearch 二、elasticsearch-head安装
    elasticsearch 一、环境配置
    针对json的查询--alibaba的开源项目jsonq
    macos下golang 1.9配置
    此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
    mvc webapi路由重写
    《Java编程的逻辑》终于上市了!
    《Java编程的逻辑》
  • 原文地址:https://www.cnblogs.com/huatao/p/4689229.html
Copyright © 2011-2022 走看看