4

示例服务的意思是: http ://services.odata.org/V4/Northwind/Northwind.svc/

我的问题是:

  1. 为什么这个服务有一个“.svc”后缀?据我所知,现在只有两种方法可以在.Net平台上实现odata v4服务,RESTier和WebAPI,见http://odata.github.io/,但它们都没有“.svc”。其实wcf数据服务有“.svc”,但是wcfds不支持odata v4。

  2. 这个示例服务的响应体是高度优化的,像这样:

    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Length: 2015
    Content-Type: application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8
    Expires: Sat, 24 Oct 2015 05:10:34 GMT
    Vary: *
    Server: Microsoft-IIS/8.0
    X-Content-Type-Options: nosniff
    OData-Version: 4.0;
    X-AspNet-Version: 4.0.30319
    ...
    
    {"@odata.context":"http://services.odata.org/V4/Northwind/Northwind.svc/$metadata","value":[{"name":"Categories","kind":"EntitySet","url":"......
    

    只有一行,就像 wcfds 一样,但我的服务是这样的:

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; odata.metadata=minimal; charset=utf-8
    Expires: -1
    Vary: Accept-Encoding
    Server: Microsoft-IIS/7.5
    OData-Version: 4.0
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    Date: Sat, 24 Oct 2015 06:56:24 GMT
    Content-Length: 364
    
    {
      "@odata.context":"http://192.168.1.99:908/api/$metadata","value":[
        {
          "name":"Test","kind":"EntitySet","url":"Test"
        },{
          "name":"TDefStoreEmp","kind":"EntitySet","url":"TDefStoreEmp"
        },{
          "name":"TDefEmp","kind":"EntitySet","url":"TDefEmp"
        },{
          "name":"TDefStore","kind":"EntitySet","url":"TDefStore"
        }
      ]
    }
    

    线太多了,怎么一根线?

  3. 所以我怀疑示例服务是基于 wcfds 的,但它如何支持 V4?事实上,我喜欢 wcfds,因为它不需要任何控制器,我只想公开一个数据库但不想在互联网上打开 1433 端口。

我的英文不好,请理解并帮助我,谢谢!

4

2 回答 2

2
  1. 没错,这个演示服务是使用 WCF 数据服务实现的。对于基于 web api 的演示服务,您可以参考:

http://services.odata.org/TripPinWebApiService

官方不支持 OData V4 的 WCF 数据服务,建议改用 WebAPI。

  1. 这称为 JSON 的缩进,默认情况下已启用。要禁用缩进,请将以下内容添加到您的 webapi 配置代码中:

    var formatters = ODataMediaTypeFormatters.Create();

    foreach (var formatter in formatters) { formatter.MessageWriterSettings.Indent = false; }

    config.Formatters.InsertRange(0, formatters);

  2. 源 WCF 数据服务在此处公开可见: https ://github.com/OData/odata.net/tree/WCFDSV4

请注意,该实现确实与 OData V4 规范存在一些差距。但是,如果您有兴趣,可以随意自己构建它或添加新功能。

按照建议,建议使用 WebAPI OData 来设置 OData V4 服务。此外,您可以选择使用更类似于 wcfds 样式的 RESTier。

于 2015-10-26T04:49:43.430 回答
1

如果您正在寻找 TripPin OData 示例,您可以在这里找到它:

https://github.com/OData/ODataSamples/tree/master/Scenarios/TripPin

于 2019-08-26T10:41:49.967 回答