我正在使用 VS2012 中的 ASP.Net WebAPI 预发布位编写服务器(我很高兴使用 VS2013,尽管目前我认为它没有帮助)。在其中,我有一堆 OData 控制器暴露了一些实体。我希望在这些实体上设置一些 OData 操作,就像 CodePlex 上可用的 ASP.Net 示例中的 ODataActionsSample 一样。
我的第一个客户端是基于 C# 的 WPF 应用程序。通过 WCF 数据服务查询很好。
我想做的是调用出现在 OData 元数据中的操作,然后解析它们的结果。
似乎本机操作调用在 WCF 数据服务客户端中不可用,因此我需要使用 HttpClient 自己进行。是对的吗?如果是这样,我已经在这条路上走了一段路。如果我想对实体调用操作,而不是对 URL 进行硬编码,我只需构建一个 LINQ 查询来获取该实体,例如(来自该 ODataActionSample)
Movies.Where(m=>m.Id == 1)
而不是调用它,我执行 .ToString() 来获取将被调用的 URL。然后我可以操纵该 URL 以添加参数和/或操作。
现在,假设可行,我会返回一些 JSON。对于 ODataActionSample,我可以通过 POST 到 URL http://localhost.fiddler:8708/odata/Movies(3)/CheckOut查看电影
这就像返回 JSON
{
"odata.metadata":"http://localhost:8708/odata/%24metadata#Movies/@Element","#CheckOut":{
},"ID":3,"Title":"Fatal Vengeance 2","Year":2012,"DueDate":"2013-07-24T16:33:14.0699789+10:00"
}
如何将其转回 WCF 数据服务已经为我制作的类型化电影对象?我觉得这是可能的,并且在 LinqPad 中使用了 DataContractJsonSerializer 类,但到目前为止还没有取得太大的成功。
另外,我是否可以使用 T4 模板或类似的东西来帮助以类型安全的方式搭建其中一些操作调用,也许作为扩展我的客户端实体代码的部分类中的方法?