gpt4 book ai didi

c# - 我可以更改用于 ODataController 请求的 ODataQueryOptions 吗?

转载 作者:行者123 更新时间:2023-12-02 05:31:35 25 4
gpt4 key购买 nike

更新

投票here on User Voice解决歧义。

<小时/>

我编写了一个继承于 ODataController 的 OData WebAPI Controller 。 .

public class ManyColumnsController : ODataController
{
[Queryable(
AllowedOrderByProperties = "Aa,Bb,Cc,Dd",
EnsureStableOrdering = false,
MaxOrderByNodeCount = 2)]
public IQueryable<ManyColumn> GetManyColumns(
ODataQueryOptions<ManyColumn> options)
{
// Because I've disabled EnsureStableOrdering,
// I need to check column "Dd" is always included
// in the OrderBy option. This will ensure stable ordering.
if (!options.OrderBy.RawValue.Contains("Dd")
{
var entityType = options.Context.ElementType as IEdmEntityType;
var ddProperty = entityType.DeclaredStructuralProperties()
.Single(p => p.Name == "Dd");
options.OrderBy.OrderByNodes.Add(new OrderByPropertyNode(
ddProperty,
OrderByDirection.Descending));
}

return this.context.ManyColumns;
}
}

此代码运行并产生额外的 OrderByNode添加到 OrderBy ODataQueryOptions的属性(property)传递到方法中。

问题

此更改对 Controller 生成的语句没有影响。处理继续进行,就好像我没有更改任何内容和任何 OrderBy应用于 ManyColumns 实体的内容将替换为原始请求的 $orderby 参数中指定的原始 OrderBy

经过进一步检查,似乎 ODataQueryOptions可能是不可变的。它的大多数属性只有 get 访问器。

问题

我是否刚刚滥用了 OrderByQueryOption 实现中的失败?

有没有办法修改ODataQueryOptions稍后将在管道中应用于请求?

最佳答案

您应该删除 [Queryable] 属性。

根据http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options#ODataQueryOptions ,您应该使用 Queryable 或手动操作 ODataQueryOptions。 Web API 从 URI 查询字符串填充 ODataQueryOptions,之后您可以(大概)更改这些选项。

在页面的更下方,他们实现了一些看起来非常接近您问题的解决方案的东西。他们实现了一个自定义的 MyQueryable 属性,该属性强制执行自定义排序验证器。您可能无法在验证期间更改查询,但您可以覆盖属性的 ApplyQuery 实现以注入(inject)所需的 order-by 子句。

关于c# - 我可以更改用于 ODataController 请求的 ODataQueryOptions 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23512076/

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