2013-08-27 72 views
0

我努力让它工作,但它似乎做了意想不到的事情,怎么了?发送XML与POST请求httpwebrequest

string xmlToSend = "<elementOne xmlns=\"htt..mynamespace\">.......</elementOne>"; 
request = (HttpWebRequest)WebRequest.Create(address); 
       request.Method = "POST"; 

       request.ContentType = "text/xml; charset=utf-8"; 
       request.Headers["Content-Length"] = xmlToSend.Length.ToString(); 

       _postData.Append(string.Format("{0}", xmlToSend)); 

       request.BeginGetRequestStream(new AsyncCallback(RequestReady), request); 

.... }

和BeginGetRequestString:

void RequestReady(IAsyncResult asyncResult) 
      { 
       HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; 

       Debug.WriteLine("xml" + _postData.ToString()); 
       using (Stream stream = request.EndGetRequestStream(asyncResult)) 
       { 
        using (StreamWriter writer = new StreamWriter(stream)) 
        { 
         writer.Write(_postData.ToString()); 
         writer.Flush(); 
        } 
       } 

       request.BeginGetResponse(new AsyncCallback(ResponseReady), request); 
      } 

我试图实现的iOS被设定请求作为XML的HTTPBODY,像(setHTTPBody )...这是正确的方式吗?

回答

2

你应该考虑远离HttpWebRequest并使用新的HTTPClient类。它们更加直观,并且提供了新的Async样式体系结构的附加优势。

在Windows 7.5程序使用新的HttpClient库,

的NuGet在https://www.nuget.org/packages/Microsoft.Net.Http(安装-封装Microsoft.Net.Http)HTTP客户端库

的NuGet http://www.nuget.org/packages/Microsoft.Bcl.Async/(安装-封装Microsoft.Bcl .Async)

发送请求

public class SendHtmlData 
{ 
public async Task<T> SendRequest<T>(XElement xml) 
    { 
    var client = new HttpClient(); 

    var response = await client.PostAsync("https://requestUri", CreateStringContent(xml)); 

    var responseString = await response.RequestMessage.Content.ReadAsStringAsync(); 
    //var responseStream = await response.RequestMessage.Content.ReadAsStreamAsync(); 
    //var responseByte = await response.RequestMessage.Content.ReadAsByteArrayAsync(); 

    return JsonConvert.DeserializeObject<T>(responseString); 
} 

private HttpContent CreateStringContent(XElement xml) 
{ 
    return new StringContent(xml.ToString(), System.Text.Encoding.UTF8, "application/xml"); 
} 
} 

在您的通话界面视图模型做同样的事情到

public async Task SendHtml() 
{ 
var xml = XElement.Parse("<elementOne xmlns=\"htt..mynamespace\">.......</elementOne>"); 

var result = await new SendHtmlData().SendRequest<MyDataClass>(xml); 
} 
+0

感谢您的回答,我解决了它与我的HTTPWEBREQUEST在最后,但这是令人愉快的!干杯 – fran