ODATA是否真的使用Microsoft Web API REST架构?
我越是研究ODATA上的Microsoft框架,我倾向于认为它不适合企业应用程序。 该框架期望所有数据库直接作为ViewModel公开,即使对于像分页和排序这样的简单操作也是如此。
我们将被迫使用强大的机制来保存呈现给JavaScript客户端的页码。
或者我不正确理解微软对OData的影响?
编辑-1:
ODATA V4是一个有状态架构吗? 由微软模式团队推动。 我没有看到从Asp.Net Web API(REST)迁移到OData(Sounds STATEFUL)架构的任何简单路径。
编辑-2:分页,排序和分组是来自客户端的传入请求的一部分。
简而言之,MS Odata服务器端实现不是有状态的,它可以被认为是REST架构。
我们将被迫使用强大的机制来保存呈现给JavaScript客户端的页码
您在请求中提供分页信息。 例如,如果您想要第2页的10个项目,您将获得前10名并跳过10。
odata-url/?$count=true&$top=10&$skip=10
如您所见,客户端/调用者指定了分页,服务器无需跟踪客户端的状态。
另外,添加$count=true
将返回基于结果集中包含的传入filter的记录总数(在上面的示例中没有filter)。 这将允许客户端计算有的页数。
该框架期望所有数据库直接作为ViewModel公开…
也不是真的。 您可以返回IQueryable
,其中T
是您的类型。 T
不一定是EF模型。 例如,从DbContext
返回以下DbContext
是可以接受的。
public IQueryable Get() { return dbContext.SomeEntities .Where(x => optionalPreFiltereExpression) .Select(x => new SomeDTO(){ Prop1 = x.Prop1, Collection1 = x.CollectionOfInterest, // etc }); }
为了进一步说明这一点,您还可以返回一个硬编码的对象列表,尽管这可能不太可能在生产中。
public IQueryable Get() { return new List(){ new SomeDTO(){ Prop1 = 5, Prop2 = "Hi there" // etc}, new SomeDTO(){ Prop1 = 6, Prop2 = "Goodbye" // etc} }).AsQueryable(); }
OData的所有选项都有很多资源。 我不会在这里包含所有内容,否则我不妨创建第二套文档。
- 支持ASP.NET Web API中的OData查询选项
- odata.org – 入门
- 使用ASP.NET Web API 2.2创建OData v4端点
- odata.org – OData版本4.0。 第1部分
- 如何设置文本框的高度?
- C#中的进度条和后台工作者
- 如何将entity frameworkICollection更改为ObservableCollection?
- .NET 4,AllowPartiallyTrustedCallers属性和SecurityCritical等安全标记
- 将vcards转换为Windows-1252
- 带有Eval()的NavigateUrl的HyperLink。 哪里出错了?
- 我在哪里可以找到Microsoft.VisualStudio.DebuggerVisualizers?
- 在Identity Custom User之后,User.Identity.GetUserId()将错误的类型返回为字符串
- 从嵌入式资源加载Crystal Report