通过 URL 查询 oData Service .net c# 的最佳方式

Best way to pass throug URL query for oData Service .net c#

我有以下内容:

  1. 启用 WebAPI oData 的端点应用程序后面有一个小数据库
  2. .NET MVC 前端,带有一些 HTML5 东西和一些程序逻辑

我通过 (1) 中的服务和 (2) 中的应用程序消费数据。

由于应用程序 (1) 启用了 oData,我想为高级用户提供在应用程序 (2) 中时在浏览器中编写 URL 过滤器的选项。所以他们可以附加这样的东西 $top=2&$orderby=name

获取 url 过滤器并传递给应用程序 (2) 中的 oData 服务的最佳方法是什么?我找不到简单地传递字符串的方法。我发现使用 lync 查询的唯一方法是 AddQueryOptions。

有什么建议吗?

  // TODO: Replace with your local URI.
        string serviceUri = "http://localhost:14800/";
        var container = new Default.Container(new Uri(serviceUri));

        var product = new ODataDemoService.Models.Product();

        // grab 
        Uri myUri = new Uri("http://localhost:14800/Products?$top=2&$orderby=name");


        NameValueCollection nv = HttpUtility.ParseQueryString(myUri.Query);
        foreach (string key in nv)
        {
            // build a filter string here 
        }


        // Append the filter string using AddQueryOptions
        foreach (var p in container.Products.AddQueryOption("$filter","(Name eq 'Hat') or (Name eq 'Socks')"))
        {
            Console.WriteLine("{0} {1} {2}", p.Name, p.Price, p.Category);
        }   

您可以使用 DataServiceContext.Execute<>

var products = container.Execute<Product>(new Uri()), "GET"); // You can pass the Uri as what you want
foreach(var p in products)
{
    Console.WriteLine("{0} {1} {2}", p.Name, p.Price, p.Category);
}