我已经使用Microsoft.OData.Client库OData Client T4 Template(版本2.3.0)创建了一个Web API OData v4服务。我唯一无法工作的是使用Expand方法链接到绑定函数。它返回主实体,但它没有通过expand方法序列化我要求它的相关实体。我使用fiddler检查了流量,并且从我的服务中返回了相关实体。是的,我已将所有NuGet库更新为最新版本。我在网上找不到任何关于此的信息。任何帮助表示赞赏。
我在下面列出了一些代码供参考:
Client.cs:
// Doesn't work returning a collection
var collectionResult = this.LibraryFolders.ByKey(newLibrary.Id).RefreshLibrary().Expand("MediaFiles").First();
// And doesn't work returning a single result
var singleResult = this.LibraryFolders.ByKey(newLibrary.Id).RefreshLibrary().Expand("MediaFiles").GetValue();
我认为问题不在我的服务代码中,因为它按预期工作,但显示它以供参考...
LibraryFoldersController.cs:
[HttpGet]
[EnableQuery]
public SingleResult<LibraryFolder> RefreshLibrary([FromODataUri] long key)
{
this.businessController.RefreshLibrary(key);
return this.GetLibraryFolder(key);
}
WebApiConfig.cs:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.MapODataServiceRoute("ODataRoute", "api", GetModel());
}
public static Microsoft.OData.Edm.IEdmModel GetModel()
{
var builder = new ODataConventionModelBuilder
{
Namespace = "OData"
};
builder.EntitySet<LibraryFolder>("LibraryFolders");
builder.EntitySet<MediaFile>("MediaFiles");
builder.EntitySet<LibraryFolder>("LibraryFolders")
.EntityType
.Function("RefreshLibrary")
.ReturnsFromEntitySet<LibraryFolder>("LibraryFolders");
return builder.GetEdmModel();
}
答案 0 :(得分:1)
这似乎是一个OData客户端错误。我创建了一个要跟踪的问题:https://github.com/OData/odata.net/issues/285 谢谢你的信息。