从C#客户端调用OData操作并解析响应

本文关键字:响应 操作 OData 客户端 调用 | 更新日期: 2023-09-27 18:23:35

我正在使用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,我可以通过张贴到URL来查看电影http://localhost.fiddler:8708/odata/Movies(3)/签出

这会返回类似的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模板或类似模板来帮助以类型安全的方式构建其中一些操作调用,例如作为扩展客户端实体代码的分部类中的方法?

从C#客户端调用OData操作并解析响应

目前,我们在WCF DS客户端中称之为"物化器"的东西并不是真正的公共的,所以我认为没有一种简单的方法可以从您使用ODatalib->Materialize解析的负载到生成的第一个类对象。

相反,我会在DataServiceContext上使用Execute(或Begin/End-Execute)方法来调用该操作。是的,这意味着你需要构建一个URL,但在大多数情况下这应该不是什么大不了的事。

请参阅这篇关于从WCF DS-调用操作的文章

相关文章: