簡體   English   中英

從PostAsync讀取XML響應()

[英]Read XML Response From PostAsync()

我正在使用PostAsync()發送數據,代碼執行完全正確。 我發送數據的站點提供XML響應通知,通知成功或失敗。 XML響應是這樣的: 成功的帖子返回1

 <?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>

這是我用來執行PostAsync() C#語法,我需要添加什么才能從頁面讀取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;
  }
}

編輯
目前,即使接收數據的站點引發錯誤,此語法也會返回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;
  }
}

編輯#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;
      }
    }
  }
}

你可以加上這一行並嘗試:

在此之后:

string resultContent = await result.Content.ReadAsStringAsync();

添加這個:

XElement incomingXml = XElement.Parse(resultContent);

或者您也可以使用ReadAsStreamAsync嘗試此選項以將流讀入XmlDocument:

string resultContent = await result.Content.ReadAsStreamAsync();

XDocument incomingXml = XDocument.Load(resultContent);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM