2016-01-19 3 views
0

У меня есть уникальный запрос для меня, где мне нужно отправить запрос JSON POST, но прочитать XML GET. Я пробовал это ниже, но получаю ошибкуОтправить поток JSON Чтение XML-ответа

Вы должны написать байты ContentLength в поток запросов перед вызовом [Begin] GetResponse.

Что я могу изменить для того, чтобы мой XML GET смог успешно прочитать ответ?

public bool PerformPost(Dictionary<string, string> dictFormValues, string strPageTitle, string strPageURL, ref string strMessage) 
{ 
    string strEndpointURL = string.Format("websitegoeshere"); 
    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="; 
    HttpWebRequest r = (System.Net.HttpWebRequest)WebRequest.Create(strEndpointURL); 
    r.Method = "POST"; 
    r.Accept = "application/json"; 
    r.ContentType = "application/x-www-form-urlencoded"; 
    r.ContentLength = strPostData.Length; 
    r.KeepAlive = false; 
    Stream datastream = r.GetRequestStream(); 
    WebResponse response = r.GetResponse(); 
    datastream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(datastream); 
    string responsefromserver = reader.ReadToEnd(); 
    var xml = System.Xml.Linq.XElement.Parse(responsefromserver); 
    if (xml.Elements("sid").FirstOrDefault().Value == "1") { return true; } 
    else 
    { 
     var errors = xml.Elements("fail"); 
     foreach (var error in errors.Elements("fail")) 
     { 
      strMessage = error.Value; 
      return false; 
     } 
    } 
    reader.Close(); 
    datastream.Close(); 
    response.Close(); 
    return true; 
} 

ответ

1

Вы не указали данные сообщения в поток запросов. Вам нужно будет вызвать datastream.Write перед вызовом GetResponse.

Например:

var buffer = Encoding.UTF8.GetBytes(strPostData); 
r.ContentLength = buffer.Length; 
datastream.Write(buffer, 0, buffer.Length); 
datastream.Close(); 
Смежные вопросы