gpt4 book ai didi

json - 将 Web API 响应包装在 JSON 中,但仍可与 IQueryable 和 oData 一起使用

转载 作者:行者123 更新时间:2023-12-04 05:12:30 26 4
gpt4 key购买 nike

我有一个 ASP.NET Web API 项目,我想在项目中使用 oData 过滤器和 ASP.NET oData 预览包。这意味着我需要使用 IQueryable作为响应类型。

不幸的是,消费者需要像这样包装的响应:

{
"total": 2,
"success": true,
"data": [
{ object1 },
{ object2 } ]
}

我创建了一个包装器对象,它分配了 IQueryable从我的原始版本响应“数据”属性,并设置“总计”和“成功”属性的值。这将创建消费者正在寻找的 JSON 响应。但它不再是 IQueryable,这意味着我无法实现 oData 过滤器。

我希望通过设置它的枚举器等来获取我的包装器对象并使其实现 IQueryable。但是,我认为这不会起作用,因为我必须分配 Provider 和 Expression 属性来实现接口(interface),而我没有知道我应该放什么。我在 IoC 中使用存储库模式,EntityFramework Code First 数据访问位于一个单独的项目中,使用 Ninject 将具体对象分配给接口(interface)占位符。也许我可以从数据访问层一直抽象出接口(interface),以便 Repository 对象携带对 IQueryProvider 的引用。您认为这是否可行,并允许它支持自动 oData 集成?

最佳答案

这是你如何做到的。在幕后,[Queryable] 只是创建 ODataQueryOptions 的一个实例,然后将其应用于您返回的可查询对象。好消息是您可以参数绑定(bind) ODataQueryOptions 并拥有如下所示的代码:

public Wrapper<MyObject> Get(ODataQueryOptions<MyObject> queryOptions)
{
IQueryable<MyObject> queryResults = queryOptions.ApplyTo(dbSet);
return Wrap(queryResults);
}

你甚至不再需要 [Queryable] 因为你正在做它会为你做的事情。希望有帮助。

关于json - 将 Web API 响应包装在 JSON 中,但仍可与 IQueryable 和 oData 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14720641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com