作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 .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/
我有一个使用 .NET 4.5 的 OData Web API 服务。它有一个 WebApi Controller ,该 Controller 源 self 自己制作的另一个 Controller 。
我正在尝试创建一个 ODataQueryContext 实例,它需要一个 EdmModel 引用。我正在尝试从 ODataProperties() 获取 Model,这是 HttpRequestMes
我是一名优秀的程序员,十分优秀!