WebApi OData 4:Etag ConcurrencyCheck与离线应用程序

时间:2015-07-31 14:53:21

标签: c# asp.net-web-api odata

我正在使用WebApi实现OData V4服务而我正在使用int?字段'版本'在我的DTO上修补实体时执行OptimisticLocking。这很好。

但我认为使用 ETags / If-Match-Headers 会更优雅。因此,我将 [ConcurrencyCheck] 属性添加到我的版本'属性。现在,基于版本字段生成 @ odata.etag 信息。精细!

我使用支持脱机的客户端来访问我的OData服务。因此,我存储了版本'本地数据库中的信息,并使用每个Patch请求发送存储的值。 当然,如果使用Etags,这不起作用。 我应该存储Etag并将其发送到标题中吗?或者是否可以从客户端存储的版本信息中计算Etag(我使用ODataJS)?

1 个答案:

答案 0 :(得分:0)

根据spec,只有当指定的值与目标实体的当前ETag值匹配时才必须处理请求,因此您应该在获得此实体时存储Etag。 E2Etest代码there可能会有所帮助。