C#使用HttpPost调用WebMethod接口:参数拼接与XML解析完整示例

唐可
唐可
发布时间:2026-10-16| 4人浏览过
原创

在C#开发中,调用传统的SOAP或RESTful WebService是常见需求。本文将通过具体代码示例,展示如何使用HttpWebRequest发送POST请求,拼接Form表单格式的参数,并正确解析返回的XML结果数据,同时包含针对调用失败时的配置排查方法。

服务端WebMethod定义示例

在进行客户端调用前,需确保服务端已发布有效的WebMethod。以下是一个基础的WebService类,包含一个无参方法HelloWorld和一个带两个整数参数的加法方法Sum:

public class WebServiceDemo : System.Web.Services.WebService
{
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

    [WebMethod]
    public string Sum(string param1, string param2)
    {
        int num1 = Convert.ToInt32(param1);
        int num2 = Convert.ToInt32(param2);
        int sum = num1 + num2;
        return sum.ToString();
    }
}

第1步:构建POST请求参数

WebService通常要求POST请求的Content-Type为 application/x-www-form-urlencoded。我们需要将参数序列化为 key=value&key=value 的字符串格式。

string url = "http://localhost:12544/WebServiceDemo.asmx";
string method = "Sum";
string num1 = "1";
string num2 = "2";

// 注意:UrlEncode防止特殊字符干扰
string param = HttpUtility.UrlEncode("param1") + "=" + HttpUtility.UrlEncode(num1) + "&" + HttpUtility.UrlEncode("param2") + "=" + HttpUtility.UrlEncode(num2); 
byte[] bytes = Encoding.UTF8.GetBytes(param); 

第2步:发送HttpWebRequest请求

使用 HttpWebRequest 创建请求对象,设置 Method 为 POST,并将序列化后的字节数组写入 RequestStream。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "/" + method);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;

using (Stream writer = request.GetRequestStream())
{
    writer.Write(bytes, 0, bytes.Length);
    // writer.Close() 已在 using 中处理
}

第3步:读取并解析XML响应

WebService的响应通常是XML格式。为了获取具体的业务数据(即WebMethod返回的字符串内容),可以使用 XmlTextReader 跳过外层信封直接读取内部文本,或者直接使用 StreamReader 读取完整XML字符串。

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string result = string.Empty;

// 方式一:直接读取内部XML字符串(推荐用于获取WebMethod返回值)
using (Stream stream = response.GetResponseStream())
using (XmlTextReader reader = new XmlTextReader(stream))
{
    reader.MoveToContent();
    result = reader.ReadInnerXml();
}

// 方式二:读取完整XML结构(调试用)
// using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
// {
//     result = sr.ReadToEnd();
// }

第4步:常见问题排错

如果在调用过程中遇到 404 Not Found 或类似的协议错误,可能是因为IIS默认未启用HttpPost协议。需要在服务端的 web.config 中添加相应的协议支持:

<system.web>
  <webServices>
    <protocols>
      <add name="HttpPost" />
    </protocols>
  </webServices>
</system.web>

总结

C#通过HttpWebRequest调用WebService的核心在于正确的参数编码(UrlEncode)、POST头部设置以及XML响应的解析。掌握这一流程可以兼容大多数遗留系统或内部API的调用需求。

以上就是C#使用HttpPost调用WebService方法的详细内容,更多关于C#编程的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。