gpt4 book ai didi

c# - ODataProperties NextLink 为空

转载 作者:行者123 更新时间:2023-11-30 18:28:21 26 4
gpt4 key购买 nike

我有一个使用 .NET 4.5 的 OData Web API 服务。它有一个 WebApi Controller ,该 Controller 源 self 自己制作的另一个 Controller 。

public class AerodromoController : BaseController
{
public PageResult<Aerodromo> Get(ODataQueryOptions<Aerodromo> options)
{
return Paging(Store.Aerodromo.All(), options);
}
}

此“分页”方法来自 BaseController 并执行以下操作:

public class BaseController : ApiController
{
public PageResult<T> Paging<T>(IQueryable<T> query, ODataQueryOptions<T> options)
{
IQueryable Data;
if (options.Top != null)
{
Data = options.ApplyTo(query, new ODataQuerySettings() { PageSize = options.Top.Value });
}
else
{
Data = options.ApplyTo(query);
}

return new PageResult<T>(
Data as IEnumerable<T>,
Request.ODataProperties().NextLink,
query.Count());
}
}

在发出这样的 ajax 请求之后:

$.getJSON('acompanhamento/aerodromo?$' + encodeURI("top=20"))

我确实得到了前 20 个实体和计数。但 nextPageLink 为空。这有点奇怪,因为下面的代码有效。会发生什么?

public class AerodromoController : BaseController
{
public PageResult<Aerodromo> Get(ODataQueryOptions<Aerodromo> options)
{
var Data = options.ApplyTo(Store.Aerodromo.All(), new ODataQuerySettings()
{
PageSize = 20
});
return new PageResult<Aerodromo>(
Data as IEnumerable<Aerodromo>,
Request.ODataProperties().NextLink,
Store.Aerodromo.All().Count());
}
}

最佳答案

这条线错了

if (options.Top != null)
{
Data = options.ApplyTo(query, new ODataQuerySettings() { PageSize = options.Top.Value });
}

如果您在客户端说您想要 20 个结果($top=20),而在服务器端您将最大页面大小设置为 20,则该 api 的用户将不会获得 nextPageLink,因为他得到了什么他想要。

如果客户端需要的页面大小超过您在服务器端设置的最大页面大小,您会得到一个 nextPageLink。另外我认为您需要验证 ODataQueryOptions 的选项。

不要将 PageSize 设置为 options.Top.Value!

var allowedOptions = new ODataValidationSettings
{
AllowedQueryOptions = AllowedQueryOptions.Top | AllowedQueryOptions.Filter | AllowedQueryOptions.Skip |
AllowedQueryOptions.OrderBy | AllowedQueryOptions.InlineCount
};

options.Validate(allowedOptions);

var Data = options.ApplyTo(Store.Aerodromo.All(), new ODataQuerySettings()
{
PageSize = 10 // now you get a next page link when u say $top=20
});

关于c# - ODataProperties NextLink 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166460/

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