如何像官方示例服务一样实现 OData V4 服务?
How implement a OData V4 services like official example services?
示例服务的意思是:
http://services.odata.org/V4/Northwind/Northwind.svc/
我的问题是:
为什么这个服务有一个“.svc”后缀?据我所知,现在只有两种方式可以在.Net平台上实现odata v4服务,RESTier和WebAPI,参见http://odata.github.io/,但它们都没有“.svc”。其实wcf数据服务有“.svc”,但是wcfds不支持odata v4.
这个示例服务的响应体是高度优化的,像这样:
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"
}
]
}
行太多,怎么一行?
所以我怀疑示例服务是基于wcfds的,但它如何支持V4?事实上,我喜欢wcfds,因为它不需要任何控制器,我只想公开一个数据库,但不想在互联网上打开1433端口。
我的英语不好,请理解并帮助我,谢谢!
- 没错,这个演示服务是使用 WCF 数据服务实现的。
基于web api 的演示服务,您可以参考:
http://services.odata.org/TripPinWebApiService
官方不支持OData V4的WCF数据服务,建议改用WebAPI。
这称为 JSON 的缩进,默认情况下启用。
要禁用缩进,请将以下内容添加到您的 webapi 配置代码中:
var 格式化程序 = ODataMediaTypeFormatters.Create();
foreach(格式化程序中的 var 格式化程序)
{
formatter.MessageWriterSettings.Indent = 假;
}
config.Formatters.InsertRange(0, 格式化程序);
源 WCF 数据服务 public 在此处可见:
https://github.com/OData/odata.net/tree/WCFDSV4
请注意,该实现确实与 OData V4 规范存在一些差距。但如果你有兴趣,你可以随意自己构建它或添加新功能。
根据建议,建议使用WebAPI OData 来设置OData V4 服务。另外,你可以选择使用更像wcfds风格的RESTier
如果您正在寻找 TripPin OData 示例,您可以在这里找到它:
https://github.com/OData/ODataSamples/tree/master/Scenarios/TripPin
示例服务的意思是: http://services.odata.org/V4/Northwind/Northwind.svc/
我的问题是:
为什么这个服务有一个“.svc”后缀?据我所知,现在只有两种方式可以在.Net平台上实现odata v4服务,RESTier和WebAPI,参见http://odata.github.io/,但它们都没有“.svc”。其实wcf数据服务有“.svc”,但是wcfds不支持odata v4.
这个示例服务的响应体是高度优化的,像这样:
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" } ] }
行太多,怎么一行?
所以我怀疑示例服务是基于wcfds的,但它如何支持V4?事实上,我喜欢wcfds,因为它不需要任何控制器,我只想公开一个数据库,但不想在互联网上打开1433端口。
我的英语不好,请理解并帮助我,谢谢!
- 没错,这个演示服务是使用 WCF 数据服务实现的。 基于web api 的演示服务,您可以参考:
http://services.odata.org/TripPinWebApiService
官方不支持OData V4的WCF数据服务,建议改用WebAPI。
这称为 JSON 的缩进,默认情况下启用。 要禁用缩进,请将以下内容添加到您的 webapi 配置代码中:
var 格式化程序 = ODataMediaTypeFormatters.Create();
foreach(格式化程序中的 var 格式化程序) { formatter.MessageWriterSettings.Indent = 假; }
config.Formatters.InsertRange(0, 格式化程序);
源 WCF 数据服务 public 在此处可见: https://github.com/OData/odata.net/tree/WCFDSV4
请注意,该实现确实与 OData V4 规范存在一些差距。但如果你有兴趣,你可以随意自己构建它或添加新功能。
根据建议,建议使用WebAPI OData 来设置OData V4 服务。另外,你可以选择使用更像wcfds风格的RESTier
如果您正在寻找 TripPin OData 示例,您可以在这里找到它:
https://github.com/OData/ODataSamples/tree/master/Scenarios/TripPin