【培训班出来的菜鸟,啥也不懂系列】C#调用接口

辛辛苦苦研究了半天的报文,发现我似乎用不到,立马就陷入了懵逼状态,C#应该怎么写, 请求报文头,到底什么意思,结果发现,我的脑子是真的笨。虽然不知道怎么做,但是我知道,在发呆,晚上就要加班了。。。

以下post调用接口的一个方法的代码,我忘记我是从哪找到了,再加上我自己的修改,就变成这样了,网上还有好多,但是这个注释给我这种菜鸟中的菜鸟满满的好感。

	    public static string Post(string postdata, string url, int timeout)
        {
            //ceShi.NetFramework.Helper.LogHelper.LogSave(string.Format("postdata: {0} url: {1} timeout:{2}", postdata, url, timeout));  
            System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接  

            string Err = "";//返回的错误信息
            string result = "";//返回结果    

            HttpWebRequest request = null;
            HttpWebResponse response = null;
            Stream reqStream = null;

            try
            {
                //设置最大连接数  
                ServicePointManager.DefaultConnectionLimit = 200;
                //设置https验证方式  
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback =
                            new RemoteCertificateValidationCallback(CheckValidationResult);
                }

                /*************************************************************** 
                * 下面设置HttpWebRequest的相关属性 
                * ************************************************************/
                request = (HttpWebRequest)WebRequest.Create(url);

                request.Method = "POST";
                request.Timeout = timeout * 1000;

                //这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据  
                request.ServicePoint.Expect100Continue = false;



                //设置POST的数据类型和长度  
                request.ContentType = "application/json;charset=utf-8";
                byte[] data = System.Text.Encoding.UTF8.GetBytes(postdata);
                request.ContentLength = data.Length;



                //往服务器写入数据  
                reqStream = request.GetRequestStream();
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();

                //获取服务端返回  
                response = (HttpWebResponse)request.GetResponse();





                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                result = sr.ReadToEnd().Trim();
                //ZhiFuLog.WriteLog("sr");


                //result = System.IO.File.ReadAllText(@"C:\Users\Administrator\Desktop\test.txt");
                //FileStream fs1 = new FileStream("c:\\TestTxt.txt", FileMode.Create, FileAccess.Write);//创建写入文件 
                //StreamWriter sw = new StreamWriter(fs1);//创建队列
                //sw.WriteLine(result);//开始写入值
                //sw.Close();
                //fs1.Close();
                sr.Close();
            }
            catch (System.Threading.ThreadAbortException e)
            {
                Err += e.ToString();
                return Err;

            }
            catch (WebException e)
            {
                Err += e.ToString();
                return Err;

            }
            catch (Exception e)
            {
                Err += e.ToString();
                return Err;

            }
            finally
            {
                //关闭连接和流  
                if (response != null)
                {
                    response.Close();
                }
                if (request != null)
                {
                    request.Abort();
                }
            }
            while (true)
            {
                if (result != null && result.Trim() != "")
                {
                    return result;
                }
                else
                {
                    return Err;
                }
            }


        }

嗯。。。。他给的接口文档, 请求报文头下边一堆传参,还有一些基础传参,嘶~这俩是一个玩意不,是?不是?是?管他呢,先传过去试试,然后把报文头下边的参数和基础参数一股脑的给他传过去,咦,竟然可以啊,返回结果了,牛逼牛逼。

		 public string pay(string oidList)
        {
        	...
        	 SortedDictionary<string, string> sParaTemp1 = new SortedDictionary<string, string>();
        	 sParaTemp1.Add("XXXX", "XXXX");
             sParaTemp1.Add("XXXX", "XXXX");
             string data1 = ZF_Tools.datapost1(sParaTemp1);
              string str = PayPlugin.YunZhiFu.ZhiFu.HttpUtil.Post(data1, serviceUrl, 6).Replace(" ", "");
        	...
		}
		/// <summary>  
        /// 得到需要传递的参数格式  
        /// </summary>  
        /// <param name="sParaTemp">参数键值</param>  
        /// <returns></returns>  
        public static string datapost1(SortedDictionary<string, string> sParaTemp)
        {
            Encoding myEncoding = Encoding.GetEncoding("utf-8");
            StringBuilder prestr = new StringBuilder();
            prestr.Append("{");
            foreach (KeyValuePair<string, string> temp in sParaTemp)
            {
                prestr.Append("\"" + temp.Key + "\":\"" + temp.Value + "\",");
            }
            string ss = prestr.ToString();
            ss = ss.Substring(0, ss.Length - 1);//去掉最后一个逗号
            ss = ss + "}";
            return ss;
        }

舒服~下班回家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值