C# 利用http发送WebService 请求和 Rest请求

C# 利用http发送WebService请求和Rest 请求

本课题使用VS 2015完成

封装功能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Xml;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace WMS.DEVICE
{  
    /// <summary>
    /// send webservice message 发送webservice时 ,用post 发送
    /// </summary>
    class WebServiceClient
    {

        /// <summary>
        /// 发送 post
        /// </summary>
        /// <param name="url"></param>
        /// <param name="para"></param> 包含webservice的参数名称 和要请求的值
        /// <param name="dataEncode"></param>
        /// <returns></returns>
        public string PostSend(string url, Dictionary<string,string> para, Encoding dataEncode)
        {
        //转换参数为string
            string ret = string.Empty;
            string param ="";
            foreach(var item in para)
            {
                param += item.Key.ToString() + "=" + item.Value.ToString()+"&";
            }
            if(param.Length>0)
                param=param.Remove(param.Length - 1);
            try
            {
                byte[] byteArray = dataEncode.GetBytes(param); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
                webReq.Method = "POST";
                webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.Timeout = 5000;
                webReq.ContentLength = byteArray.Length;
                Stream newStream = webReq.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                newStream.Close();
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                //读取报文内的值
                XmlReader rd = XmlReader.Create(response.GetResponseStream());
                rd.MoveToContent();
                ret = rd.ReadInnerXml();
                rd.Close();
                rd.Dispose();
                response.Close();
                response.Dispose();
                newStream.Close();
                newStream.Dispose();
                return ret;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
        
    }

    /// <summary>
    /// 发送 rest 信息
    /// </summary>
    class PostMan
    {

        /// <summary>
        /// POST
        /// </summary>
        /// <param name="postUrl"></param>
        /// <param name="paramData"></param>
        /// <param name="dataEncode"></param>
        /// <returns></returns>
        public string PostWebRequest(string postUrl, string paramData, Encoding dataEncode)
        {
            string ret = string.Empty;
            try
            {
                byte[] byteArray = dataEncode.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
                webReq.Method = "POST";
                webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.Timeout = 5000;
                webReq.ContentLength = byteArray.Length;
                Stream newStream = webReq.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                newStream.Close();
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
                ret = sr.ReadToEnd();
                sr.Close();
                sr.Dispose();
                response.Close();
                response.Dispose();
                newStream.Close();
                newStream.Dispose();
                return ret;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        /// <summary>
        /// GET
        /// </summary>
        /// <param name="postUrl"></param>
        /// <param name="paramData"></param>
        /// <param name="dataEncode"></param>
        /// <returns></returns>
        public string GetWebRequest(string postUrl, string paramData, Encoding dataEncode)
        {
            string ret = string.Empty;
            try
            {
                byte[] byteArray = dataEncode.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
                webReq.Method = "GET";
                webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.Timeout = 5000;
                webReq.ContentLength = byteArray.Length;
                Stream newStream = webReq.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                newStream.Close();
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
                ret = sr.ReadToEnd();
                sr.Close();
                sr.Dispose();
                response.Close();
                response.Dispose();
                newStream.Close();
                newStream.Dispose();
                return ret;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

    }
}`

调用

private void BtnClick(object para)
        {
            switch ((string)para)
            {               
                case "Send":
                    if (PostInfo.Url=="")
                    {
                        MessageBox.Show("url不能为空");
                        return;
                    }
                    if(WebServiceEn)//web service模式
                    {
                        WebServiceClient ws = new WebServiceClient();
                        Dictionary<string, string> dic = new Dictionary<string, string>();
                        foreach (var item in Labels)
                        {
                            dic.Add(item.Name, item.Value);
                        }
                        PostInfo.recvmsg = ws.PostSend(PostInfo.Url, dic,System.Text.Encoding.UTF8);
                    }else if(RestEn)//rest 模式
                    {
                        PostMan pm = new PostMan();
                        PostInfo.recvmsg = pm.PostWebRequest(PostInfo.Url, PostInfo.sendmsg, System.Text.Encoding.UTF8);
                    }                
                    break;
            }
        }

页面效果

一个简单的WebService服务,将收到的parameters返回

 public class WebService : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod(Description ="Request")]
        //http://localhost:58932/WebService.asmx/Request
        public string Request(string InterfaceId,int Factory,string User,string Password,string Parameters)
        {           
            return Parameters;
        }
    }

输入webservice的地址
配置该Webservice参数
在这里插入图片描述输入rest地址
输入参数
在这里插入图片描述以上是利用Http来发送webservice和rest请求。
通常情况下我们需要传送结构体数据时,可以利用Newtonsoft来序列化和反序列结构体如下

                    webclient.getlot_request req = new getlot_request();
                    req.interfaceid = "123";
                    req.password = "123";
                    req.parameters = new request_para();
                    req.parameters.lineid = 20;
                    req.parameters.fromtime = "123";
                    webserviceclient ws = new webserviceclient();
                    dictionary<string, string> dic = new dictionary<string, string>();
                    dic.add("interfaceid", req.interfaceid.tostring());
                    dic.add("factory", req.interfaceid.tostring());
                    dic.add("user", req.interfaceid.tostring());
                    dic.add("password", req.interfaceid.tostring());
                    dic.add("parameters", jsonconvert.serializeobject(req.parameters));
                    postinfo.recvmsg = ws.postsend(postinfo.url, dic, system.text.encoding.utf8);
                    //jobject jo = jobject.parse(postinfo.recvmsg);
                    req.parameters = jsonconvert.deserializeobject<request_para>(postinfo.recvmsg);
                    return;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值