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日

相关文章

  • ASP.NET操作各类时间段获取方法汇总

    ASP.NET操作各类时间段获取方法汇总 在ASP.NET中,我们常常需要获取各类时间段,例如获取当前时间、获取某个日期的年月日信息、获取指定时间段的日期列表。本文将系统介绍ASP.NET操作各类时间段获取方法及其使用场景,包括以下几个方面: 获取当前时间 获取当前日期的年月日信息 获取指定时间段的日期列表 1. 获取当前时间 要获取当前时间,我们可以使用 …

    C# 2023年6月1日
    00
  • C#中的引用类型以及特殊引用类型详解

    C#中的引用类型以及特殊引用类型详解 引用类型 在 C# 中,引用类型是指用于引用一个对象的对象变量称为引用类型,这种类型的变量存储的是指向对象的引用,而不是对象本身。引用类型在内存中通常分为两部分,一部分是存储对象本身的实例数据,另一部分是指向该对象的引用。引用类型的变量在内存中存储的是指向实例数据的指针,而非实例本身的完整数据。 以下是一个简单的引用类型…

    C# 2023年5月15日
    00
  • asp.net子窗体与父窗体交互实战分享

    ASP.NET 子窗体与父窗体交互实战分享 本文主要介绍ASP.NET中子窗体与父窗体交互的实现方法。涉及到了IFrame嵌套、控件之间的通信等具体技术细节。 IFrame父子窗体嵌套实现方式 父子窗体嵌套方式主要有两种,一种是利用IFrame实现,另一种则是采用模态窗口的方式。这里介绍第一种方式。 在ASP.NET中,可以在主页面中嵌入一个IFrame页面…

    C# 2023年6月3日
    00
  • C#中ArrayList 类的使用详解

    C#中ArrayList 类的使用详解 简介 在C#中,ArrayList类是一个动态数组。它与普通数组使用方法相似,但是具有更高的灵活性。在ArrayList中,可以添加、删除和插入元素,而且不需要预定义数组大小。 ArrayList类与其他集合类(如List、Dictionary等)相比,具有一些缺点。因为ArrayList是一个对象数组,因此它不适用于…

    C# 2023年6月6日
    00
  • .net从服务器下载文件中文名乱码解决方案

    针对“.net从服务器下载文件中文名乱码解决方案”,以下是完整攻略的步骤: 问题背景 当从服务器下载文件时,如果文件名中包含中文字符,很容易出现乱码错误。这是由于字符编码问题造成的。 解决方案 .NET提供了System.Net.WebClient类来下载文件。要解决中文文件名乱码问题,我们需要进行以下设置: 设置下载参数 下载文件前需要设置WebClien…

    C# 2023年5月15日
    00
  • C#中FormClosing与FormClosed的区别详细解析

    C#是一种非常流行的编程语言,常被用于开发Windows上的桌面应用程序。在Windows窗体应用程序中,我们会经常使用到FormClosing和FormClosed事件来监测窗体关闭的状态。但是,许多人对这两个事件的具体区别并不是很清楚。在本文中,我们将详细讲解这两个事件的区别及其使用示例。 FormClosing事件 当Windows窗体应用程序正在关闭…

    C# 2023年6月8日
    00
  • C#中Activator.CreateInstance()方法用法分析

    C#中Activator.CreateInstance()方法用法分析 前言 C#中 Activator.CreateInstance() 方法是一种动态创建实例的方法。在实际项目中,我们常常需要动态加载程序集并创建其中的类型对象。这时,Activator.CreateInstance()方法就可以起到很好的作用。 方法说明 Activator.Create…

    C# 2023年5月31日
    00
  • C# 抓取网页内容的方法

    我来为你详细讲解使用C#抓取网页内容的具体攻略。 一、准备工作 在开始之前,我们需要先引用 System.Net 名称空间,该名称空间为我们提供了一系列的网络操作类。 以下是代码示例: using System.Net; 二、HTTP请求 接下来我们需要构造一个 HTTP 请求,通过该请求来获取网页内容。通常我们抓取网页内容所用的 Http 请求类型是 Ge…

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