- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Microsoft.AspNet.OData v6.0.0
并希望将 MaxTop
值设置为 10
将启用 $top
查询选项。
但是,请求 URL http://localhost:23344/odata/v4/Resources?$top=10
仍然给我错误:
{"error":{"code":"","message":"The query specified in the URI is not valid. The limit of '0' for Top query has been exceeded. The value from the incoming request is '10'.","innererror":{"message":"The limit of '0' for Top query has been exceeded. The value from the incoming request is '10'.","type":"Microsoft.OData.ODataException","stacktrace":" at System.Web.OData.Query.Validators.TopQueryValidator.Validate(TopQueryOption topQueryOption, ODataValidationSettings validationSettings)\r\n at System.Web.OData.Query.TopQueryOption.Validate(ODataValidationSettings validationSettings)\r\n at System.Web.OData.Query.Validators.ODataQueryValidator.Validate(ODataQueryOptions options, ODataValidationSettings validationSettings)\r\n at System.Web.OData.Query.ODataQueryOptions.Validate(ODataValidationSettings validationSettings)\r\n at System.Web.OData.EnableQueryAttribute.ValidateQuery(HttpRequestMessage request, ODataQueryOptions queryOptions)\r\n at System.Web.OData.EnableQueryAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor, ODataQueryContext queryContext)\r\n at System.Web.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)"}}}
好像顶级查询的限制仍然为 0。
public class ResourcesController : ODataController
{
private IResourceService resourceService;
public ResourcesController(IResourceService resourceService)
{
this.resourceService = resourceService;
}
[EnableQuery(MaxTop=10)]
public IQueryable<Resource> Get()
{
return resourceService.GetResources().AsQueryable();
}
[EnableQuery]
public SingleResult<Resource> Get([FromODataUri] int key)
{
var result = resourceService.GetResources().Where(r => r.Id == key).AsQueryable();
return SingleResult.Create(result);
}
}
public static void Register(HttpConfiguration config)
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder
{
Namespace = "MyNamespace",
ContainerName = "DefaultContainer"
};
builder.EntitySet<Resource>("Resources");
builder.EntityType<Resource>().Select().Count().Expand().OrderBy();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata/v4",
model: builder.GetEdmModel());
}
Github issue describing possible bug with behaviour of MaxTop
我启用的所有其他查询选项,包括 $skip
。
如 this question在 WebApiConfig.cs
之前设置 config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
>config.mapODataServiceRoute(...
。没用。
将 [Page(MaxTop = 100)]
添加到我的 Resource
模型中,就像在同一个问题中一样。 没用。
在模型上设置 [Page]
属性。来自 WebApi OData documentation “如果您设置页面属性,默认情况下它将启用 $top 且没有限制最大值”。 无效。
在 Controller 上设置 [EnableQuery(PageSize=10)]
属性。来自 WebApi OData documentation “如果您设置页面属性,默认情况下它将启用 $top 且没有限制最大值”。 启用了分页但没有工作。
错误表明在每种情况下顶部的限制都是 0
最佳答案
我遇到了同样的问题,发现如果您像以前那样在构建器中指定任何规则。
builder.EntitySet<Resource>("Resources");
builder.EntityType<Resource>().Select().Count().Expand().OrderBy();
属性设置的值将被覆盖并设置为 0。
如果您删除这些条目并将全局配置放在
config.Select().Expand().Filter().OrderBy().MaxTop(600).Count();
它会起作用。
您还可以像这样在构建器上使用流畅的界面来定义 MaxTop
。
builder.EntityType<T>().Page(100, 100);
即使您在构建器中为实体类型定义其他规则,它也会起作用。
这可能是因为在 fluent builder 接口(interface)中定义一些配置时创建了新配置,并且您不能使用属性( Controller 上的 EnableQueryAttribute
和模型上的页面)。
这可能是一个错误,因为他们仍然推荐属性方法。我会将其报告为 OData 存储库中的问题。
关于c# - WebApi OData 即使在设置 MaxTop 后,已超过 Top 查询的 '0' 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849692/
[EnableQuery(PageSize=20)] 和 [EnableQuery(MaxTop=20)] 有什么区别? 据我所知,他们都对结果设置了最大限制。 在其中任何一个上调用 GET odat
根据 adsense 文档,maxTop 是“当广告单元位于搜索结果上方时需要。使用此参数指定要在顶部广告单元上展示的广告数量。” https://developers.google.com/cust
我正在使用 Microsoft.AspNet.OData v6.0.0 并希望将 MaxTop 值设置为 10 将启用 $top 查询选项。 但是,请求 URL http://localhost:23
我是一名优秀的程序员,十分优秀!