从 C# 调用 OData 服务

本文关键字:服务 OData 调用 | 更新日期: 2023-09-27 18:34:27

我使用以下代码从 C# 调用 OData 服务(这是 Odata.org 的工作服务),但我没有得到任何结果.
错误在response.GetResponseStream() 中。

这是错误:

Length = 'stream.Length' threw an exception of type 'System.NotSupportedException'

我想调用服务并从中解析数据,最简单的方法是什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Net;
using System.IO;
using System.Xml;
namespace ConsoleApplication1
    {
    public class Class1
        {
        static void Main(string[] args)
            {
            Class1.CreateObject();
            }
        private const string URL = "http://services.odata.org/OData/OData.svc/Products?$format=atom";

        private static void CreateObject()
            {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            request.Method = "GET";
            request.ContentType = "application/xml";
            request.Accept = "application/xml";
            using (WebResponse response = request.GetResponse())
                {
                using (Stream stream = response.GetResponseStream())
                    {
                    XmlTextReader reader = new XmlTextReader(stream);
                    }
                }
            }
        }
    }

从 C# 调用 OData 服务

我在我的机器上运行了你的代码,它执行得很好,我能够遍历 XmlTextReader 检索到的所有 XML 元素。

    var request = (HttpWebRequest)WebRequest.Create(URL);
    request.Method = "GET";
    request.ContentType = "application/xml";
    request.Accept = "application/xml";
    using (var response = request.GetResponse())
    {
        using (var stream = response.GetResponseStream())
        {
            var reader = new XmlTextReader(stream);
            while (reader.Read())
            {
                Console.WriteLine(reader.Value);
            }
        }
    }

但正如@qujck建议的那样,看看HttpClient。它更容易使用。

如果您运行的是 .NET 4.5,请查看 HttpClient (MSDN)

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(endpoint);
Stream stream = await response
    .Content.ReadAsStreamAsync().ConfigureAwait(false);
response.EnsureSuccessStatusCode();

有关完整示例,请参阅此处和此处