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

yizhihongxing

下面我会详细讲解在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#使用foreach语句遍历堆栈(Stack)的方法

    介绍C#使用foreach语句遍历堆栈 (Stack)的方法。 1. Stack类简介 在介绍用foreach语句遍历Stack之前,先简单介绍一下Stack类。在C#的System.Collections命名空间中,有一个名为Stack的类。Stack是一种后进先出(LIFO)的数据结构,可以存储多个对象。其中,堆栈的入栈操作使用 Push方法,而出栈操作…

    C# 2023年6月7日
    00
  • 如何在UpdatePanel中调用JS客户端脚本

    在 ASP.NET 中,可以使用 UpdatePanel 控件来实现局部异步刷新页面的效果。但是,默认情况下,UpdatePanel 不支持调用客户端JS脚本。本文就讲解如何在 UpdatePanel 中调用JS客户端脚本,通过两个示例帮助读者更好地理解。 方法一:使用ScriptManager类的RegisterStartupScript方法 在 Upda…

    C# 2023年6月6日
    00
  • C#中的in参数与性能分析详解

    C#中的in参数与性能分析详解 什么是in参数 in参数是C# 7.2版本中新增的参数修饰符,用于修饰方法参数。使用in修饰符定义的方法参数将使用只读引用传递参数。只读引用传递参数是指传递的参数不能被修改,仅可读取其值。 in参数的优势 使用in参数可以提高代码的性能。如果方法的参数为值类型(比如int、double等),在方法调用时,会将这些值类型的参数按…

    C# 2023年6月7日
    00
  • C#判断字符串是否是int/double(实例)

    下面就是详细的攻略: 题目背景 在我们的日常工作中,可能会遇到需要判断一个字符串值是否是整数或者浮点数。比如,我们从用户输入表单中获取到了一个值,我们需要判断这个值是不是整数或浮点数。在C#中,我们可以采用以下的方式来判断字符串是否是整数或者浮点数。 判断字符串是否是整数 我们可以使用C#内置的TryParse方法来判断一个字符串是否是整数,并且可以获取到整…

    C# 2023年6月8日
    00
  • C# 中文简体转繁体实现代码

    针对您所提出的问题,我将为您提供一份针对C#中文简体转繁体实现的完整攻略。 1. 了解中文简体和繁体 中文的简体和繁体是两种不同的汉字书写方式,简体汉字主要在中国大陆地区和新加坡使用,而繁体汉字则主要在中国台湾、香港以及澳门等地区使用。因此,如果您的应用需要支持不同地区的用户并且需要涉及到中文的显示和输入,可能需要提供简繁转换的功能。 2. 简体转繁体的实现…

    C# 2023年6月7日
    00
  • C#如何判断.Net Framework版本是否满足软件运行需要的版本

    可以使用以下步骤来判断.Net Framework版本是否满足软件运行的需要的版本: 步骤一:引入System.Runtime.Versioning命名空间 判断.Net Framework 版本需要使用System.Runtime.Versioning命名空间中的FrameworkName类。首先需要在程序中引用此命名空间: using System.Ru…

    C# 2023年6月3日
    00
  • ASP.NET MVC4 HtmlHelper扩展类,实现分页功能

    ASP.NET MVC4是一种Web应用程序框架,它提供了一种模型-视图-控制器(MVC)的架构模式,用于构建可扩展的Web应用程序。在ASP.NET MVC4中,HtmlHelper是一个非常有用的类,它提供了许多有用的方法,例如生成HTML标记、表单、分页等。在本文中,我们将介绍如何使用HtmlHelper扩展类来实现分页功能。 步骤一:创建HtmlHe…

    C# 2023年5月17日
    00
  • LZW数据压缩算法的原理分析

    LZW数据压缩算法是一种基于字典的数据压缩算法,它通过构建字典来实现对输入数据的压缩。其主要流程如下: 1.初始化:先将所有单个字符加入字典中。 2.构建字典:从输入数据中读取第一个字符,然后依次读取字符直到在字典中找不到该字符串。将这个字符串(除最后一个字符)在字典中的下标输出并加入字典中,然后从下一个字符重新开始读取。 3.压缩:每次从输入数据中读取一个…

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