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="<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/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 
            ........
            ........
    
      }        
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 使用 HttpPost 请求调用 WebService,可以按照以下步骤进行操作: 1. 首先,确保你的 C# 项目引用了 `System.Net.Http` 命名空间。 2. 创建一个 `HttpClient` 对象,用于发送 Http 请求。可以使用以下代码创建一个 `HttpClient` 对象: ```csharp HttpClient client = new HttpClient(); ``` 3. 设置要调用WebService 的 URL。假设 WebService 的 URL 是 `http://example.com/your_webservice`,可以使用以下代码设置 URL: ```csharp string url = "http://example.com/your_webservice"; ``` 4. 构建请求参数。根据你要调用的具体 WebService 方法的要求,构建相应的请求参数。可以使用 `FormUrlEncodedContent` 类来构建 URL 编码的请求参数。例如: ```csharp var parameters = new Dictionary<string, string> { { "param1", "value1" }, { "param2", "value2" } }; var content = new FormUrlEncodedContent(parameters); ``` 5. 发送 HttpPost 请求并获取响应。使用 `client.PostAsync` 方法发送 HttpPost 请求,并使用 `await` 关键字等待响应。例如: ```csharp HttpResponseMessage response = await client.PostAsync(url, content); ``` 6. 处理响应。根据你的需求,可以从响应获取内容、状态码等信息。例如,可以使用以下代码获取响应内容: ```csharp string responseContent = await response.Content.ReadAsStringAsync(); ``` 这样,你就可以在 C# 使用 HttpPost 请求调用 WebService。根据实际情况,可能还需要处理异常、设置请求头等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值