如何在C#中获取第三方网站发送至指定URL的XML响应
问题:获取第三方网站发送至指定redirectUrl的XML响应失败
我们尝试通过以下代码获取XML数据,但未能成功:
public ActionResult Index() { XmlDocument xdoc = new XmlDocument(); //xml doc used for xml parsing xdoc.Load("http://xxx/Home/Index"); XmlNodeList xNodelst = xdoc.DocumentElement.SelectNodes("/Data/Quote/Product"); //reading node so that we can traverse thorugh the XML foreach (XmlNode xNode in xNodelst)//traversing XML { Sessions.PartNumber = xNode["PartNum"].InnerText; } return View(); }
排查与解决方案
1. 修正数据接收逻辑
第三方网站发送到redirectUrl的XML一般是POST请求的请求体内容,你当前用XmlDocument.Load("url")是发起GET请求拉取页面,完全没处理POST过来的XML数据。正确做法是读取当前请求的输入流:
public ActionResult Index() { using (StreamReader reader = new StreamReader(Request.InputStream)) { string xmlContent = reader.ReadToEnd(); XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(xmlContent); XmlNodeList xNodelst = xdoc.DocumentElement.SelectNodes("/Data/Quote/Product"); foreach (XmlNode xNode in xNodelst) { Sessions.PartNumber = xNode["PartNum"].InnerText; } } return View(); }
2. 校验XML节点路径
确认/Data/Quote/Product这个XPath路径和实际接收到的XML结构完全匹配。可以先将xmlContent输出到日志,查看XML真实结构后再调整XPath。
3. 处理编码问题
如果第三方发送的XML有特定编码,读取流时需指定对应编码:
using (StreamReader reader = new StreamReader(Request.InputStream, Encoding.UTF8)) { // 后续逻辑不变 }
4. 验证请求到达情况
先在Action中添加日志,确认第三方是否真的将请求发送到了该redirectUrl:
public ActionResult Index() { System.IO.File.WriteAllText(@"C:\temp\request.log", $"Method: {Request.HttpMethod}\nContent: {new StreamReader(Request.InputStream).ReadToEnd()}"); // 后续逻辑... }
内容的提问来源于stack exchange,提问作者Potato
相关产品推荐
相关产品推荐

