C# HTTPClient、C和XML响应

C# HTTPClient、C和XML响应,c#,xml,http,rest,dotnet-httpclient,C#,Xml,Http,Rest,Dotnet Httpclient,我需要点击一个REST服务来获取我们有的一些设备的状态信息。此信息是只读的 我已经使用Fiddler成功地测试了我需要测试的内容,但不确定如何通过HTTPClient或其他一些例程来完成它?我只想编写一个C控制台应用程序 基本上,任务是: 1使用POST通过登录URL登录REST服务 a我必须传递与用户定义字符串匹配的用户代理标头 b我必须传递与text/xml匹配的内容类型标题 我必须发送一个用户定义的XML文档的XML负载。 d将有一个带有会话ID的XML响应,并设置我需要获取的cookie

我需要点击一个REST服务来获取我们有的一些设备的状态信息。此信息是只读的

我已经使用Fiddler成功地测试了我需要测试的内容,但不确定如何通过HTTPClient或其他一些例程来完成它?我只想编写一个C控制台应用程序

基本上,任务是:

1使用POST通过登录URL登录REST服务 a我必须传递与用户定义字符串匹配的用户代理标头 b我必须传递与text/xml匹配的内容类型标题 我必须发送一个用户定义的XML文档的XML负载。 d将有一个带有会话ID的XML响应,并设置我需要获取的cookie值

2我必须使用POST通过设备列表URL获取设备列表 a我必须传递与用户定义字符串匹配的用户代理标头 b我必须传递与text/xml匹配的内容类型标题 c我必须传递带有初始响应中设置的Cookie值的Cookie头 d我必须发送用户定义的XML文档的XML负载。还需要包括来自初始响应的会话ID。 e将有一个XML响应,其中包含一个设备列表。。。可能有多个设备ID唯一。我需要解析出一个特定的设备ID

3我必须使用POST通过设备状态URL获取设备状态 a我必须传递与用户定义字符串匹配的用户代理标头 b我必须传递与text/xml匹配的内容类型标题 c我必须传递带有初始响应中设置的Cookie值的Cookie头 d我必须发送用户定义的XML文档的XML和有效负载。还需要包括来自初始响应的会话ID。 e将有一个带有设备状态信息列表的XML响应。我需要解析出特定的状态ID

如果有人能帮我,我将不胜感激


我还想知道是否应该创建一个包含所有XML结果的登录名、设备列表、设备状态对象,并将其填充到一个对象中?也许这太过分了

这里的关键点在于对所有请求使用相同的方法以保留cookie:

var cookieContainer = new CookieContainer();
1使用POST a通过登录URL登录REST服务我必须通过 与用户定义字符串b匹配的用户代理标头我必须通过 内容类型头匹配text/xml c我必须发送一个 用户定义的XML文档。d将有一个带有 会话ID和设置我需要获取的cookie值

3我必须使用POST通过设备状态URL获取设备状态 a I必须传递与用户定义字符串b I匹配的用户代理标头 必须传递与text/xml匹配的内容类型标头我必须传递Cookie 具有来自初始响应d的设置cookie值的标头I必须 用户定义的XML文档的发送和XML有效负载。也需要 包括来自初始响应的会话ID。e将有一个XML 使用设备状态信息列表进行响应。我需要 解析出特定的状态ID


您应该已经拥有了自己实现此功能所需的所有位。

请帮助我。怎样通过盲目地编写代码,然后从您那里得到数百万个后续问题?不,我找到的所有示例都需要JSON响应,我找不到任何获取和设置cookie的方法。但是谢谢!谢谢-我去看看。REST服务出于某种原因希望会话ID和Cookie知道您已通过身份验证。
var request = (HttpWebRequest)WebRequest.Create("http://example.com/login");
request.CookieContainer = cookieContainer;
request.UserAgent = "Some User Agent";
request.ContentType = "text/xml";
request.Method = "POST";
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
    writer.Write("<foo>bar</foo>");
}

using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    string body = reader.ReadToEnd();
    // the body will probably contain the SessionId you are looking for
    // go ahead, parse it and extract the necessary information
}
var request = (HttpWebRequest)WebRequest.Create("http://example.com/devices");
request.CookieContainer = cookieContainer;
request.UserAgent = "Some User Agent";
request.ContentType = "text/xml";
request.Method = "POST";
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
    writer.Write("<foo><baz>bazinga</baz><sessionid>... the session id you have read from the body of the previous request might come here ...</sessionid></foo>");
}

using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    string body = reader.ReadToEnd();
}
request.Headers[HttpRequestHeader.Cookie] = "Value of the cookie you have read from the cookieContainer of the first request";