Nad*_*ard 5 c# xml asp.net webforms
我PostAsync()用来发送数据,代码完全按照它应该的方式执行。我将数据发送到的站点提供XML了成功或失败的响应通知。的XML响应是,像这样:甲成功的交返回1
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="utf-8" ?> <result> <success>1</success> <uploadid/> </errors> </result>
而不成功返回<error>标签之间的原因
<?xml version="1.0" encoding="utf-8" ?>
<result>
<success>0</success>
<iploadid/>
<errors>
<error>File is not in correct format</error>
</errors>
</result>
Run Code Online (Sandbox Code Playgroud)
这是我用来执行我需要添加什么才能从页面读取响应的C#语法?PostAsync()XML
private void SendAsyncData()
{
string connectionString = "Data Source=hmod;Initial Catalog=salesdb;uid=userid;password=password;MultipleActiveResultSets=True";
DataTable grds = new DataTable();
using (var con = new SqlConnection(connectionString))
using (var cmd = new SqlCommand("procedureone", con))
using (var da = new SqlDataAdapter(cmd))
{
cmd.CommandType = CommandType.StoredProcedure;
da.Fill(grds);
}
var client = new HttpClient();
var q = string.Empty;
foreach (DataRow row in grds.Rows)
{
var parameterSet = new List<KeyValuePair<string, string>>();
for (int i = 0; i < grds.Columns.Count; ++i)
{
parameterSet.Add(new KeyValuePair<string, string>(grds.Columns[i].ColumnName, row[i].ToString()));
}
var result = client.PostAsync("http://weneedsampledata/ashx", new FormUrlEncodedContent(parameterSet)).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
目前,即使接收数据的站点抛出错误,此语法也会返回代码 200(成功),我需要一种“读取”XML 响应的方法来确定数据是否实际成功。我试图在下面添加以读取响应,但它给了我一个编译错误:
“System.Net.Http.HttpResponseMessage”不包含“GetResponse”的定义,并且无法找到接受“System.Net.Http.HttpResponseMessage”类型的第一个参数的扩展方法“GetResponse”(您是否缺少 using 指令或汇编参考?)
var response = result.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
var postresult = readStream.ReadToEnd();
var xml = System.Xml.Linq.XElement.Parse(postresult);
if (xml.Elements("success").FirstOrDefault().Value == "1")
{
lblgoodbad.Text = "It was good.";
}
else
{
var errors = xml.Elements("errors");
foreach (var error in errors.Elements("error"))
{
lblgoodbad.Text = error.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 #2
感谢 @Hussey 的帮助 - 我只是对我的语法做了一个快速调整,它可以正常运行。我的完整语法如下:
private void SendAsyncData()
{
string connectionString = "Data Source=hmod;Initial Catalog=salesdb;uid=userid;password=password;MultipleActiveResultSets=True";
DataTable grds = new DataTable();
using (var con = new SqlConnection(connectionString))
using (var cmd = new SqlCommand("procedureone", con))
using (var da = new SqlDataAdapter(cmd))
{
cmd.CommandType = CommandType.StoredProcedure;
da.Fill(grds);
}
var client = new HttpClient();
var q = string.Empty;
foreach (DataRow row in grds.Rows)
{
var parameterSet = new List<KeyValuePair<string, string>>();
for (int i = 0; i < grds.Columns.Count; ++i)
{
parameterSet.Add(new KeyValuePair<string, string>(grds.Columns[i].ColumnName, row[i].ToString()));
}
var result = client.PostAsync("http://weneedsampledata/ashx", new FormUrlEncodedContent(parameterSet)).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
var xml = System.Xml.Linq.XElement.Parse(resultContent);
if (xml.Elements("success").FirstOrDefault().Value == "1")
{
lblgoodbad.Text = "It was good.";
}
else
{
var errors = xml.Elements("errors");
foreach (var error in errors.Elements("error"))
{
lblgoodbad.Text = error.Value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以添加这一行并尝试:
此行之后:
string resultContent = await result.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
添加这个:
XElement incomingXml = XElement.Parse(resultContent);
Run Code Online (Sandbox Code Playgroud)
或者,您也可以尝试使用 ReadAsStreamAsync 来将流读入 XmlDocument 中:
string resultContent = await result.Content.ReadAsStreamAsync();
XDocument incomingXml = XDocument.Load(resultContent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10825 次 |
| 最近记录: |