下面我会详细讲解在C#中使用HttpPost请求调用WebService的方法,包含以下几个步骤:
- 创建C#客户端代理类
- 设置WebService的URL和相应的方法名
- 准备请求参数
- 发送HttpPost请求
- 解析并处理响应数据
具体步骤如下:
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为例,假设我们要查询北京市的天气预报,具体步骤如下:
- 从聚合数据的API文档中获取该API的URL和请求参数
我们可以在聚合数据的官网上注册账号,并创建应用,然后获取到该API的URL和请求参数。
例如,该API的URL为:http://apis.juhe.cn/simpleWeather/query
请求参数为:city=北京&key=APPKEY
其中,APPKEY是我们在创建应用时获取到的应用密钥。
- 创建C#客户端代理类
在Visual Studio中以项目方式打开C#工程,然后右键单击工程名称,选择“添加”->“服务引用”,在弹出的对话框中输入该API的URL,单击“Go”按钮,然后单击“确定”按钮即可。
此时,Visual Studio会自动生成相应的代理类,我们可以通过这个代理类与API进行交互。
- 设置API的URL和相应的方法名
private static readonly string ApiUrl = "http://apis.juhe.cn/simpleWeather/query";
private static readonly string MethodName = "queryWeather";
其中,ApiUrl是API的URL地址,MethodName是要调用的方法名。
- 准备请求参数
string city = "北京";
string appKey = "XXX"; // 替换为自己的应用密钥
string requestData = $"city={city}&key={appKey}";
其中,requestData就是请求参数的字符串形式。
- 发送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";
}
- 创建C#客户端代理类
在Visual Studio中以项目方式打开C#工程,然后右键单击工程名称,选择“添加”->“服务引用”,在弹出的对话框中输入WebService的URL,单击“Go”按钮,选择要引用的WebService,并设置引用名称,然后单击“确定”按钮即可。
- 设置WebService的URL和相应的方法名
private static readonly string WebServiceUrl = "http://localhost:8080/MyFileService.asmx";
private static readonly string MethodName = "UploadFile";
其中,WebServiceUrl是WebService的URL地址,MethodName是要调用的方法名。
- 准备请求参数
string filePath = @"D:\test.jpg"; // 待上传的文件路径
byte[] fileContent = File.ReadAllBytes(filePath); // 文件内容
string fileName = Path.GetFileName(filePath); // 文件名
其中,fileName是文件名,fileContent是文件内容的字节数组形式。
- 发送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技术站