gpt4 book ai didi

c# - 使用 OData QueryableAttribute 修改从 ASP.NET Web API 返回的响应内容

转载 作者:太空狗 更新时间:2023-10-29 23:46:12 24 4
gpt4 key购买 nike

这是我的问题。我正在使用 ASP.NET Web API 2.0 和 QueryableAttribute 来利用一些 OData 过滤功能。

public class VideoController : ApiController
{
[HttpGet]
[Route("activevideos")]
[Queryable]
public IEnumerable<Video> GetActiveVideos(ODataQueryOptions<Video> options)
{
return new GetvContext().Videos.Where(c => c.IsActive);
}
}

现在,我有一个类可以用来修改响应对象和包含的实体。在我开始使用 QueryableAttribute 之前,这工作正常。在此之前,我从之前的方法返回一个 List 而不是 IEnumerable。

public class TestMessageProcessHandler : MessageProcessingHandler
{
protected override HttpResponseMessage ProcessResponse(
HttpResponseMessage response, CancellationToken cancellationToken)
{

var content = ((ObjectContent)(response.Content)).Value;
// Do something here with the content. This used to be a List<Video>
// but now the object it is of type:
// System.Data.Entity.Infrastructure.DbQuery<System.Web.Http.OData.Query.Expressions.SelectExpandBinder.SelectSome<Content.Api.Video>>
}
}

我需要能够从中获取实体,但我不确定如何从类型中获取:

System.Data.Entity.Infrastructure.DbQuery<System.Web.Http.OData.Query.Expressions.SelectExpandBinder.SelectSome<Content.Api.Video>>类似于 List<Video>所以我可以修改 Video对象。

最佳答案

删除 [Queryable] 属性并自行管理数据查询 - 如下所示:

public class VideoController : ApiController
{
[HttpGet]
[Route("activevideos")]
public IList<Video> GetActiveVideos(ODataQueryOptions<Video> options)
{
var s = new ODataQuerySettings() { PageSize = 1 };
var result = options.ApplyTo(
new GetvContext().Videos.Where(c => c.IsActive), s)
.ToList();

return result;
}
}

关于c# - 使用 OData QueryableAttribute 修改从 ASP.NET Web API 返回的响应内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19569123/

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