C#中发送HttpPost请求来调用WebService

一、Webservice调用的三种方式:

Webservice调用1:浏览器中输入以下URL,然后再返回的页面输入参数,提交实现调用
http://localhost/WebService/MyService.asmx?op=MyAction

Webservice调用2:html中通过表单提交来实现调用

<form id="form1" runat="server" action="http://10.15.223.56/WebService/MyService.asmx/MyAction">
  <input type="text" name="strXml" value="" /> 
  
  <input type="submit" value="Send" />
form>

Webservice调用3:在C#中发送HttpPost请求来调用WebService中的MyAction方法,代码如下:

        void UpdateContactSign()
        {
           string ServerPage ="http://localhost/WebService/HelloWorld.asmx";  //服务
            try
            {
                service += "/HelloWorld2";  //Hello 表示方法名
              string postData = "username=" + username; //表示传递的参数
          //  byte[] dataArray = Convert.FromBase64String(postData);
            System.Text.Encoding encode = System.Text.Encoding.UTF8;
            byte[] dataArray = encode.GetBytes(postData);//将参数转换为字节数组
            HttpWebRequest request =(HttpWebRequest) HttpWebRequest.Create(service); //获取请求

              request.Method = "POST";
            request.ContentLength = dataArray.Length;
            request.ContentType = "application/x-www-form-urlencoded";
             Stream dataStream = request.GetRequestStream();  //获取输入流
           dataStream.Write(dataArray, 0, dataArray.Length);  //写入数据
           dataStream.Close();
           string res = string.Empty;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();//获取响应
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);//获取输出流
            res = reader.ReadToEnd();
            reader.Close();
            Console.writeline(res);
            }
            catch (Exception ex)
            {
                
            }
        }

       
  

 

二、C#中发送HttpPost请求参数传值的中文乱码处理:

1.客户端参数Base64编码处理  在给postData赋值之前,先对 strData进行Base64编码处理,注意加号(’+‘)的替换处理,否则由于加号经过Url传递后变成空格而得不到合法的Base64字符串,修改代码如下:

     //发送消息到服务器
        public string HttpConnectToServer(string ServerPage,string strXml,string strData)
        {
            //Base64编码 处理中文乱码
            byte[] buffer = Encoding.Default.GetBytes(strData);
            string Base64StrData = Convert.ToBase64String(buffer).Replace("+", "%2B");//处理加号

            string postData = "strXml=" + strXml+"&strData="+Base64StrData;

            byte[] dataArray = Encoding.Default.GetBytes(postData);

            //创建请求
        .......
        .......
       return res;
    }

2.服务端获取到数据后,先解码再使用。解码的代码如下:

        public string MyAction(string strXml, string strData)
        {
            //Base64解码
            byte[] buffer = Convert.FromBase64String(strData);
            string Data = Encoding.Default.GetString(buffer);
           
           //方法实现部分代码中凡用到strData的地方 改为使用解码后的Data 
            ........
            ........
    
      }        

你可能感兴趣的:(C#,C#,WebService,HttpPost)