我正在使用C#& ASP.net对网页执行POST。如何阅读XML响应以了解我的提交是否有错误或是否成功?
这是我尝试过的,但它只返回成功/失败消息,它不会显示从页面返回的实际xml。
private void Perform()
{
this.lblResult.Text = string.Empty;
Dictionary<string, string> dictFormValues = new Dictionary<string, string>();
string connectionString = null;
SqlConnection cnn;
SqlCommand cmd;
StringBuilder sql = new StringBuilder();
SqlDataReader reader;
string email = string.Empty;
connectionString = "Data Source=server;Initial Catalog=db;User ID=;Password=";
sql.Append("select TOP 1 maexst ");
sql.Append("from redbone.redlight.dbo.maxima ");
cnn = new SqlConnection(connectionString);
try
{
cnn.Open();
cmd = new SqlCommand(sql.ToString(), cnn);
reader = cmd.ExecuteReader();
while (reader.Read()) { dictFormValues.Add("maexst", reader.GetValue(0).ToString()); }
reader.Close();
cmd.Dispose();
cnn.Close();
}
catch (Exception ex) { Response.Write(ex.Message.ToString()); }
string strIpAddress = System.Web.HttpContext.Current.Request.UserHostAddress;
string strPageTitle = this.Title;
string strPageURL = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
string strError = "";
bool blnRet = false;
blnRet = Post(dictFormValues, strPageTitle, strPageURL, ref strError);
if (blnRet == true)
{
this.lblResult.Text = "It was good!";
}
else { this.lblResult.Text = strError + ": Error Occured"; }
}
public bool blnRet(Dictionary<string, string> dictFormValues, string strPageTitle, string strPageURL, ref string strMessage)
{
string strEndpointURL = string.Format("http://testtest12test123.aspx");
System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
string strPostData = "";
foreach (var d in dictFormValues) { strPostData += d.Key + "=" + Server.UrlEncode(d.Value) + "&"; }
strPostData += "hs_context=";
System.Net.HttpWebRequest r = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(strEndpointURL);
r.Method = "POST";
r.Accept = "application/json";
r.ContentType = "application/x-www-form-urlencoded";
r.ContentLength = strPostData.Length;
r.KeepAlive = false;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(r.GetRequestStream()))
{
try { sw.Write(strPostData); }
catch (Exception ex)
{
strMessage = ex.Message;
return false;
}
}
return true;
}
修改
成功回应
<?xml version="1.0" encoding="utf-8" ?>
<result>
<success>1</success>
<postid>12345</postid>
<errors/>
</result>
未成功回复
<?xml version="1.0" encoding="utf-8" ?>
<result>
<success>0</success>
<postid/>
<errors>
<error>Error Listed Here</error>
<error>Error 2 Listed Here</error>
<error>Error 3 Listed Here</error>
</errors>
</result>
答案 0 :(得分:4)
尝试:
var request = WebRequest.Create("http://some.website/") as HttpWebRequest;
var response = request.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
var result = readStream.ReadToEnd();
这会将页面内容放在result
下一步做什么取决于实际的响应......从那里你可以使用:
或者像HTML Agility Pack这样的东西可以让你解析响应。
使用XElement的示例
using System.Xml.Linq;
using System.Linq;
using System.Xml;
var xml = System.Xml.Linq.XElement.Parse(result);
if (xml.Elements("success").FirstOrDefault().Value == "1")
{
// Process Success
Console.WriteLine("All Worked!");
}
else
{
var errors = xml.Elements("errors");
foreach (var error in errors.Elements("error"))
{
// read error messages
Console.WriteLine(error.Value);
}
}
可能有一种更简单的方法来解析XElement
,但这应该会给你一个想法。