你的位置:首页 > ASP.net教程

[ASP.net教程]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="str value="<a ObjID=\"9\"></a>" /> 
  <input type="text" name="strData" value="ContactSign|990011|我的数据" />
  <input type="submit" value="Send" />
</form>

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

复制代码
    void UpdateContactSign()    {      string ServerPage ="http://localhost/WebService/MyService.asmx";      try      {        //ServerPage += "?op=TangramAction";        ServerPage += "/MyAction";//MyAction是WebService中的方法         string str"<a ObjID=\"9\"></a>",;//第一个参数         string strData="ContactSign|990011|我的数据";//第二个参数         string res = HttpConnectToServer(ServerPage, str//MessageBox.Show(res);      }      catch (Exception ex)      {              }    }    //发送消息到服务器    public string HttpConnectToServer(string ServerPage,string strstring strData)    {      string postData = "str" + str"&strData="+strData;      byte[] dataArray = Encoding.Default.GetBytes(postData);      //创建请求      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ServerPage);      request.Method = "POST";      request.ContentLength = dataArray.Length;      request.ContentType = "application/x-www-form-urlencoded";      //创建输入流      Stream dataStream = null;      try      {        dataStream = request.GetRequestStream();      }      catch (Exception)      {        return null;//连接服务器失败      }      //发送请求      dataStream.Write(dataArray, 0, dataArray.Length);      dataStream.Close();      //读取返回消息      string res = string.Empty;      try      {        HttpWebResponse response = (HttpWebResponse)request.GetResponse();        StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);        res = reader.ReadToEnd();        reader.Close();      }      catch (Exception ex)      {        return null;//连接服务器失败      }      return res;    } 
复制代码

 

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

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

复制代码
     //发送消息到服务器    public string HttpConnectToServer(string ServerPage,string strstring strData)    {      //Base64编码 处理中文乱码      byte[] buffer = Encoding.Default.GetBytes(strData);      string Base64StrData = Convert.ToBase64String(buffer).Replace("+", "%2B");//处理加号      string postData = "str" + str"&strData="+Base64StrData;      byte[] dataArray = Encoding.Default.GetBytes(postData);      //创建请求
        .......
        .......       return res;
    }
复制代码

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

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