C# REST HttpWebResponse不以字符串形式返回xml数据
首先,我知道这段代码不一定安全,而且非常基本。我正在学习如何使用C语言中的web表单使用rest服务,这对我来说都是新的主题。几乎只有两个文本框用于验证凭据,一个查询文本框和一个按钮用于发送带有标签的请求。我只想在文本框中输入ID1,然后返回具有该ID的条目的名字和姓氏 在彻底搜索网络后,我尝试了许多不同的方法,但似乎无法解决问题 问题是:WebResponse中的StreamReader数据不会以XML的形式返回 问题:如何返回所需的XML标记?我需要解析它们吗?如果是,怎么做 XDoc版本不返回任何内容,而直流读取器返回一个字符串,其中包含一些数据以及不应该存在的数字,并且没有尖括号。以下是目前的代码:C# REST HttpWebResponse不以字符串形式返回xml数据,c#,asp.net,xml,rest,webforms,C#,Asp.net,Xml,Rest,Webforms,首先,我知道这段代码不一定安全,而且非常基本。我正在学习如何使用C语言中的web表单使用rest服务,这对我来说都是新的主题。几乎只有两个文本框用于验证凭据,一个查询文本框和一个按钮用于发送带有标签的请求。我只想在文本框中输入ID1,然后返回具有该ID的条目的名字和姓氏 在彻底搜索网络后,我尝试了许多不同的方法,但似乎无法解决问题 问题是:WebResponse中的StreamReader数据不会以XML的形式返回 问题:如何返回所需的XML标记?我需要解析它们吗?如果是,怎么做 XDoc版本不
if (QueryTextBox2.Text != "")
{
string tableName = "Entry";
string requestURL = "https://myUrl.com/rest/services/" + tableName;
HttpWebRequest request = WebRequest.Create(requestURL) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "text/xml; encoding:='charset=utf-8'";
request.Headers["CustomUserName"] = TextBox1.Text;
request.Headers["CustomPassword"] = TextBox3.Text;
string xml = "<Entry><ID1>" + QueryTextBox2.Text + "</ID1></Entry>";
byte[] byteArray = Encoding.UTF8.GetBytes(xml.ToString());
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK) {
Stream postData = response.GetResponseStream();
StreamReader reader = new StreamReader(postData, Encoding.UTF8);
string result = reader.ReadToEnd();
Label2.Text = result;
} else
{
Label2.Text = "There was an error: " + response.StatusDescription;
}
}
else
{
TextBox2.Text = "Please Enter an ID";
}
}
}
在:if statusCode==OK中替换整个块
firefox Poster插件返回的数据为:
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom">
<title type="text">Search Results</title>
<id>https://myUrl.com/rest/services</id>
<updated>2015-10-07T09:51:32Z</updated>
<link rel="self" type="application/atom+xml" href="https://myUrl.com/rest/services" />
<entry>
<id>https://myUrl.com/rest/services</id>
<Entry>
<ID1>900009</ID1>
<NameLast>Smith</NameLast>
<NameFirst>Tom</NameFirst>
<NameTitle></NameTitle>
<NamePreferred>Alex</NamePreferred>
<NameWeb>tsmith</NameWeb>
<NameOther></NameOther>
<NameInitials></NameInitials>
</Entry></content></entry></feed>
我已经删除了很多响应数据,因为它太大了,而且大部分都是匿名的,所以请记住这一点。我会使用System.Net.Http.HttpClient,它有一个更容易使用Http请求的接口 我没有测试文档解析,只是按照中的嵌套级别进行操作,直到找到所需的元素
async void Main()
{
var textBox2String = "2"
if (!string.IsNullOrEmpty(textBox2String))
{
const string table = "Entry";
var client = new HttpClient();
var url = $"https://myurl.com/rest/services/{table}";
var xml = $"<Entry><ID1>{textBox2String}</ID1></Entry>";
client.DefaultRequestHeaders.TryAddWithoutValidation("CustomUserName", "username");
client.DefaultRequestHeaders.TryAddWithoutValidation("CustomPassword", "password");
var response = await client.PostAsync(url, new StringContent(xml, Encoding.UTF8, "text/xml"));
var content = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var document = XDocument.Parse(content);
var entry = document.Root.Element(table);
var firstName = entry.Element("FirstName").Value;
var lastName = entry.Element("LastName").Value;
$"{firstName} {lastName}".Dump();
}
else
{
Console.WriteLine($"An error occurred processing this request: {content}");
}
}
else
{
textBox2String = "Please enter an ID";
}
}
async void Main()
{
var textBox2String = "2"
if (!string.IsNullOrEmpty(textBox2String))
{
const string table = "Entry";
var client = new HttpClient();
var url = $"https://myurl.com/rest/services/{table}";
var xml = $"<Entry><ID1>{textBox2String}</ID1></Entry>";
client.DefaultRequestHeaders.TryAddWithoutValidation("CustomUserName", "username");
client.DefaultRequestHeaders.TryAddWithoutValidation("CustomPassword", "password");
var response = await client.PostAsync(url, new StringContent(xml, Encoding.UTF8, "text/xml"));
var content = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var document = XDocument.Parse(content);
var entry = document.Root.Element(table);
var firstName = entry.Element("FirstName").Value;
var lastName = entry.Element("LastName").Value;
$"{firstName} {lastName}".Dump();
}
else
{
Console.WriteLine($"An error occurred processing this request: {content}");
}
}
else
{
textBox2String = "Please enter an ID";
}
}