私はPostAsync()
を使用してデータを送信し、コードは正確に実行されます。データを送信するサイトには、成功または失敗を通知する応答通知がXML
で提供されます。 XML
応答はとても似ている: 非成功これは<error>
タグPostAsync()からXML応答を読み取る
<?xml version="1.0" encoding="utf-8" ?>
<result>
<success>0</success>
<iploadid/>
<errors>
<error>File is not in correct format</error>
</errors>
</result>
間の理由を返しながら成功しポストは1
<?xml version="1.0" encoding="utf-8" ?> <result> <success>1</success> <uploadid/> </errors> </result>
を返します私のを実行するために使用しているC#の構文3210ページから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;
}
}
EDIT
は現在、この構文は、データを受信するサイトは、エラーをスローした場合でも200(成功)のコードを返し、私はデータかどうかを判断するためにXML応答を「読み」の方法が必要です実際に成功したかどうかはわかりません。私は応答を読み取るために以下を追加しようとしましたが、それは私のコンパイルエラーを与える:
「System.Net.Http.HttpResponseMessageは」 '「のGetResponse」の定義なし拡張メソッドが含まれていませんGetResponse見つけることができSystem.Net.Http.HttpResponseMessage '」は、タイプの最初の引数を受け入れる'(あなたが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;
}
}
EDIT#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;
}
}
}
}
XElementの使用incomingXml = XElement.Parse(resultContent);ラベルに書き込むためにxml.Elementを解析するにはどうすればよいですか? – NadineSmithJonesPicard
属性値は、次のように名前で取得できます。var errorName = incomingXml.Attribute( "error")。 – Husein
それは私にエラーを(もしあれば)与えるだろう - どのように成功(またはxml = 1)だったかわかります – NadineSmithJonesPicard