Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# REST HttpWebResponse不以字符串形式返回xml数据_C#_Asp.net_Xml_Rest_Webforms - Fatal编程技术网

C# REST HttpWebResponse不以字符串形式返回xml数据

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版本不

首先,我知道这段代码不一定安全,而且非常基本。我正在学习如何使用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";
    }
}