C#使用HttpPost请求调用WebService的方法

下面我会详细讲解在C#中使用HttpPost请求调用WebService的方法,包含以下几个步骤:

  1. 创建C#客户端代理类
  2. 设置WebService的URL和相应的方法名
  3. 准备请求参数
  4. 发送HttpPost请求
  5. 解析并处理响应数据

具体步骤如下:

1. 创建C#客户端代理类

首先,在Visual Studio中以项目方式打开C#工程,然后右键单击工程名称,选择“添加”->“服务引用”,在弹出的对话框中输入WebService的URL,单击“Go”按钮,选择要引用的WebService,并设置引用名称,然后单击“确定”按钮即可。

此时,Visual Studio会自动生成相应的代理类,我们可以通过这个代理类与WebService进行交互。

2. 设置WebService的URL和相应的方法名

在实际调用过程中,我们需要设置WebService的URL和要调用的方法名,代码示例如下:

private static readonly string WebServiceUrl = "http://localhost:8080/MyWebService.asmx";
private static readonly string MethodName = "MyTestMethod";

其中,WebServiceUrl是WebService的URL地址,MethodName是要调用的方法名。

3. 准备请求参数

在发送HttpPost请求之前,我们需要准备请求参数。具体内容根据实际情况而定,示例代码如下:

string name = "张三";
int age = 25;
string requestData = $"name={name}&age={age}";

其中,requestData就是请求参数的字符串形式,可以根据需要修改。

4. 发送HttpPost请求

下面是通过HttpPost请求调用WebService的完整代码:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace MyWebServiceClient
{
    class Program
    {
        private static readonly string WebServiceUrl = "http://localhost:8080/MyWebService.asmx";
        private static readonly string MethodName = "MyTestMethod";

        static void Main(string[] args)
        {
            string name = "张三";
            int age = 25;
            string requestData = $"name={name}&age={age}";

            string responseData = SendHttpPostRequest(requestData);

            Console.WriteLine(responseData);

            Console.ReadKey();
        }

        private static string SendHttpPostRequest(string requestData)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WebServiceUrl);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] bytes = Encoding.UTF8.GetBytes(requestData);
            request.ContentLength = bytes.Length;
            Stream reqstream = request.GetRequestStream();
            reqstream.Write(bytes, 0, bytes.Length);
            reqstream.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            string responseData = reader.ReadToEnd();
            reader.Close();
            stream.Close();
            response.Close();

            return responseData;
        }
    }
}

其中,SendHttpPostRequest方法是发送HttpPost请求的核心代码。

5. 解析并处理响应数据

HttpPost请求的响应数据是一个XML格式的字符串,我们可以使用XmlDocument类对响应数据进行解析和处理,示例代码如下:

private static void ProcessResponseData(string responseData)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(responseData);
    XmlNodeList nodes = doc.SelectNodes($"/{MethodName}Result/resultList/user");
    foreach (XmlNode node in nodes)
    {
        string name = node.SelectSingleNode("name").InnerText;
        int age = int.Parse(node.SelectSingleNode("age").InnerText);
        Console.WriteLine($"name:{name}, age:{age}");
    }
}

其中,/MyTestMethodResult/resultList/user是WebService返回结果中的XPath路径,根据实际情况进行修改。

至此,我们就完成了在C#中使用HttpPost请求调用WebService的完整攻略。

下面,我将给出两个具体示例,以方便大家更好地理解具体步骤。

示例一:查询某个城市的天气预报

以聚合数据的天气预报API为例,假设我们要查询北京市的天气预报,具体步骤如下:

  1. 从聚合数据的API文档中获取该API的URL和请求参数

我们可以在聚合数据的官网上注册账号,并创建应用,然后获取到该API的URL和请求参数。

例如,该API的URL为:http://apis.juhe.cn/simpleWeather/query

请求参数为:city=北京&key=APPKEY

其中,APPKEY是我们在创建应用时获取到的应用密钥。

  1. 创建C#客户端代理类

在Visual Studio中以项目方式打开C#工程,然后右键单击工程名称,选择“添加”->“服务引用”,在弹出的对话框中输入该API的URL,单击“Go”按钮,然后单击“确定”按钮即可。

此时,Visual Studio会自动生成相应的代理类,我们可以通过这个代理类与API进行交互。

  1. 设置API的URL和相应的方法名
private static readonly string ApiUrl = "http://apis.juhe.cn/simpleWeather/query";
private static readonly string MethodName = "queryWeather";

其中,ApiUrl是API的URL地址,MethodName是要调用的方法名。

  1. 准备请求参数
string city = "北京";
string appKey = "XXX"; // 替换为自己的应用密钥
string requestData = $"city={city}&key={appKey}";

其中,requestData就是请求参数的字符串形式。

  1. 发送HttpPost请求

完整代码如下:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace SimpleWeatherClient
{
    class Program
    {
        private static readonly string ApiUrl = "http://apis.juhe.cn/simpleWeather/query";
        private static readonly string MethodName = "queryWeather";

        static void Main(string[] args)
        {
            string city = "北京";
            string appKey = "XXX"; // 替换为自己的应用密钥
            string requestData = $"city={city}&key={appKey}";

            string responseData = SendHttpPostRequest(requestData);

            Console.WriteLine(responseData);

            Console.ReadKey();
        }

        private static string SendHttpPostRequest(string requestData)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ApiUrl);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] bytes = Encoding.UTF8.GetBytes(requestData);
            request.ContentLength = bytes.Length;
            Stream reqstream = request.GetRequestStream();
            reqstream.Write(bytes, 0, bytes.Length);
            reqstream.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            string responseData = reader.ReadToEnd();
            reader.Close();
            stream.Close();
            response.Close();

            return responseData;
        }
    }
}

其中,SendHttpPostRequest方法是发送HttpPost请求的核心();
foreach (var result in results)
{
string city = result["city"].Value();
string weather = result["weather"].Value();
string temperature = result["temperature"].Value();
Console.WriteLine($"{city}的天气:{weather},温度:{temperature}");
}
}
else
{
Console.WriteLine(json["reason"].Value());
}
}


其中,关于如何使用Json.NET库,这里就不再赘述了。

### 示例二:上传文件到服务器

假设我们需要上传一个文件到服务器端,并进行保存,具体步骤如下:

1. 在服务端添加一个Web方法用于接收文件

在服务端的代码中添加以下Web方法,用于接收文件并保存到指定路径:

```c#
[WebMethod]
public string UploadFile(string fileName, byte[] fileContent)
{
    string filePath = $@"D:\UploadFiles\{fileName}"; // 上传文件保存路径

    using (FileStream fs = new FileStream(filePath, FileMode.Create))
    {
        fs.Write(fileContent, 0, fileContent.Length);
    }

    return "OK";
}
  1. 创建C#客户端代理类

在Visual Studio中以项目方式打开C#工程,然后右键单击工程名称,选择“添加”->“服务引用”,在弹出的对话框中输入WebService的URL,单击“Go”按钮,选择要引用的WebService,并设置引用名称,然后单击“确定”按钮即可。

  1. 设置WebService的URL和相应的方法名
private static readonly string WebServiceUrl = "http://localhost:8080/MyFileService.asmx";
private static readonly string MethodName = "UploadFile";

其中,WebServiceUrl是WebService的URL地址,MethodName是要调用的方法名。

  1. 准备请求参数
string filePath = @"D:\test.jpg"; // 待上传的文件路径
byte[] fileContent = File.ReadAllBytes(filePath); // 文件内容
string fileName = Path.GetFileName(filePath); // 文件名

其中,fileName是文件名,fileContent是文件内容的字节数组形式。

  1. 发送HttpPost请求

完整代码如下:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace MyFileClient
{
    class Program
    {
        private static readonly string WebServiceUrl = "http://localhost:8080/MyFileService.asmx";
        private static readonly string MethodName = "UploadFile";

        static void Main(string[] args)
        {
            string filePath = @"D:\test.jpg";
            byte[] fileContent = File.ReadAllBytes(filePath);
            string fileName = Path.GetFileName(filePath);

            string responseData = SendHttpPostRequest(fileName, fileContent);

            Console.WriteLine(responseData);

            Console.ReadKey();
        }

        private static string SendHttpPostRequest(string fileName, byte[] fileContent)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WebServiceUrl);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";

            string requestData = $"fileName={fileName}&fileContent={Convert.ToBase64String(fileContent)}";
            byte[] bytes = Encoding.UTF8.GetBytes(requestData);
            request.ContentLength = bytes.Length;
            Stream reqstream = request.GetRequestStream();
            reqstream.Write(bytes, 0, bytes.Length);
            reqstream.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            string responseData = reader.ReadToEnd();
            reader.Close();
            stream.Close();
            response.Close();

            return responseData;
        }
    }
}

其中,SendHttpPostRequest方法是发送HttpPost请求的核心代码。感谢您的提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用HttpPost请求调用WebService的方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#/VB.NET 自定义PPT动画路径的步骤

    C#/VB.NET 可以通过程序动态生成 PowerPoint(PPT)文档,并自定义 PPT 动画路径。下面是具体的步骤: 1. 创建 PowerPoint 应用程序对象 首先需要创建一个 PowerPoint 应用程序对象,可以通过调用 COM 互操作库中的 PowerPoint.Application 类来完成: using PowerPoint = …

    C# 2023年6月3日
    00
  • EF Core从TPH迁移到TPT

    Intro EF Core支持多种方式处理具有继承关系的表,现在支持TPH、TPC(EF Core 7)、TPT,具体的实现方式可以参考官方文档和这篇文章。 大致总结一下不同的方式的区别:TPH:所有的类型都放在一张表中,使用discriminator字段用以区别不同的类型TPT:不同的子类型有单独的表存放子类独有的字段,父虚类型也有一张单独的表存放共有的字…

    C# 2023年4月18日
    00
  • C#实现简单的3DES加密解密功能示例

    C#实现简单的3DES加密解密功能示例可以分为以下步骤:1. 引入命名空间 using System.Security.Cryptography; 创建3DES加密对象 TripleDESCryptoServiceProvider des3 = new TripleDESCryptoServiceProvider(); 设置加密密钥和 IV des3.Key…

    C# 2023年6月7日
    00
  • C#写一套最全的MySQL帮助类(包括增删改查)

    介绍说明:这个帮助类包含了六个主要的方法:ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。其中,ExecuteNonQuery用于执行不返回结果集的SQL语句;ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列;Execut…

    C# 2023年4月22日
    00
  • C#实现简易多人聊天室

    下面是“C#实现简易多人聊天室”的完整攻略: 1. 创建C# Windows窗体应用程序 首先,需要在Visual Studio中创建一个新的Windows窗体应用程序。 2. 添加控件 在窗体上添加控件,例如一个文本框、一个按钮和一个列表框。文本框用于输入聊天内容,按钮用于发送消息,列表框则用于显示所有接收到的消息。 3. 建立套接字连接 在C#中,可以使…

    C# 2023年5月15日
    00
  • ASP.NET自带对象JSON字符串与实体类的转换

    在ASP.NET项目中,我们常常需要将一个JSON字符串转换成一个实体对象,或者将一个实体对象转换成JSON字符串。ASP.NET提供了方便的自带对象来处理这种转换,下面将详细讲解实现的步骤。 1. 将JSON字符串转换成实体类对象 将JSON字符串转换为实体类对象的基本步骤如下: 引入命名空间 我们需要引入System.Web.Script.Seriali…

    C# 2023年5月31日
    00
  • C#中DataTable排序、检索、合并等操作实例

    C#中DataTable排序、检索、合并等操作实例 在C#中,DataTable是一种常用的数据结构,用于存储和操作数据。本文将提供详细的“C#中DataTable排序、检索、合并等操作实例”的完整攻略,包括如何对DataTable进行排序、检索、合并等操作,以及两个示例。 对DataTable进行排序 要对DataTable进行排序,我们可以使用DataT…

    C# 2023年5月15日
    00
  • C#实现串口通信的示例详解

    下面我就开始详细讲解“C#实现串口通信的示例详解”的完整攻略。 总体介绍 首先我们需要了解C#实现串口通信的基本原理,即通过串口通信协议在计算机和设备之间进行数据的传输。常见的应用场景包括连接硬件设备、嵌入式系统通讯等。为了实现串口通信,需要使用C#编程实现数据的发送和接收。同时,我们还需要设置串口的各种参数,如波特率、数据位、校验位、停止位等,以确保稳定的…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部