.NET Core 2.1 OData v4在服务器端修改$ filter

Xaphann

我需要$filter在.NET Core 2.1 API的服务器端进行修改我看过这些:

https://entityframework.net/knowledge-base/33660648/odata-v4-modify--filter-on-server-side

OData V4在服务器端修改$ filter

修改WebAPI OData QueryOptions.Filter的最佳方法

(和其他几个)

他们都按照以下方式做一些事情:

//Get the URL
var url = queryOptions.Request.RequestUri.AbsoluteUri;
//Then modify the URL
url = url.Replace("$filter=ID%20eq%201", "$filter=ID%20eq%202");
//Apply the URL
return queryOptions.ApplyTo(queryable);

问题是它出现在.NET core中没有RequestUri我可以通过多种不同方式获取查询:

var query = originalRequest.QueryString.Value;
//or a foreach loop
var filter = Request.Query;
foreach (var x in filter)
//...

但是,两者QueryString.Value Request.Query都给我一个错误“值没有setter”

而且该方法ApplyTo不在.NET Core中。

在.NET Core中执行此操作的正确方法是什么?我有缺少的包裹吗?

约翰·加索戈

@Xaphann您可以EnableQueryAttribute按照以下方式扩展

public class ExtendedEnableQueryAttribute : EnableQueryAttribute
{
    public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
    {
        // ... second check in the if statement might be overkill - abundance of caution?
        if (queryOptions.Filter != null && queryOptions.Request.Query.ContainsKey("$filter"))
        {
            var stringValuesDict = new Dictionary<string, StringValues>();

            foreach(var kvPair in queryOptions.Request.Query.Where(d => !d.Key.Equals("$filter")))
            {
                // This way the new StringValues instances are owned exclusively by substitute query collection
                var values = new List<string>();
                foreach(var value in kvPair.Value)
                {
                    values.Add(value);
                }
                stringValuesDict.Add(kvPair.Key, new StringValues(values.ToArray()));
            }
            // Substitute the $filter option
            stringValuesDict.Add("$filter", new StringValues("ID eq 202"));
            // Substitute the request query collection
            queryOptions.Request.Query = new QueryCollection(stringValuesDict);

            queryOptions = new ODataQueryOptions(queryOptions.Context, queryOptions.Request);
        }

        return base.ApplyQuery(queryable, queryOptions);
    }
}

然后,您可以继续将此扩展属性应用于控制器操作。我实际进行了测试,它似乎适用于这样的表达式:

?$filter=ID eq 201&$orderby=Name&$select=Name

如果这种方法对您有用,我的建议是进行更广泛的测试,也许还编写一些测试以验证行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OData V4在服务器端修改$ filter

来自分类Dev

ASP.NET Core 2,OData v4 属性路由

来自分类Dev

ASP.NET Core MVC 2:NameValueCollection 实例在服务器端为空

来自分类Dev

无法在服务器中运行asp.net Core,Angular 2,服务器端渲染项目

来自分类Dev

从Angular 2到ASP.net Core的POST请求不起作用。服务器端为空值

来自分类Dev

.Net OData v4客户端生成-IDataErrorInfo

来自分类Dev

Jaydata与.net Odata服务器

来自分类Dev

.NET Core 3.1中的OData配置

来自分类Dev

.NET Core OData 操作参数 Null

来自分类Dev

ASP.NET Core中的服务器端图形

来自分类Dev

Blazor服务器端(.Net Core)自定义菜单

来自分类Dev

oData v4(6.1.0)在$ expand中嵌套$ filter

来自分类Dev

odata4 $ filter返回错误结果

来自分类Dev

如何在服务器端Blazor中自定义ASP.NET Core身份?

来自分类Dev

IExceptionFilter处理程序在ASP.NET Core 3.1 Blazor(服务器端)中不起作用

来自分类Dev

如何在ASP.net Core中实现dataTables服务器端分页/搜索/排序

来自分类Dev

在ASP.NET Core WebAPI中获取OData计数

来自分类Dev

Odata ASP.NET Core 2.2 Web API分页

来自分类Dev

.Net Core 3.1中的OData路由/路径问题

来自分类Dev

如何在oData .Net Core 3.1中启用$ levels

来自分类Dev

如何在.Net Core OData中添加后处理?

来自分类Dev

angular2 + web.api2:从服务器端(不是asp.net核心)注入防伪令牌

来自分类Dev

Web API 2 Odata V4 PATCH返回404

来自分类Dev

ASP Net Core 1 RC2 AccountController注入

来自分类Dev

带有Odata-V4和Dapper的WebApi-服务器端过滤

来自分类Dev

如何在ASP.NET Core 3.1 MVC中进行RequiredIf客户端和服务器端验证?

来自分类Dev

Web Api oData v4 $ ref 404或服务器错误

来自分类Dev

Web Api oData v4 $ ref 404或服务器错误

来自分类Dev

在构建服务器上构建.NET Core 1.0 RC2应用

Related 相关文章

  1. 1

    OData V4在服务器端修改$ filter

  2. 2

    ASP.NET Core 2,OData v4 属性路由

  3. 3

    ASP.NET Core MVC 2:NameValueCollection 实例在服务器端为空

  4. 4

    无法在服务器中运行asp.net Core,Angular 2,服务器端渲染项目

  5. 5

    从Angular 2到ASP.net Core的POST请求不起作用。服务器端为空值

  6. 6

    .Net OData v4客户端生成-IDataErrorInfo

  7. 7

    Jaydata与.net Odata服务器

  8. 8

    .NET Core 3.1中的OData配置

  9. 9

    .NET Core OData 操作参数 Null

  10. 10

    ASP.NET Core中的服务器端图形

  11. 11

    Blazor服务器端(.Net Core)自定义菜单

  12. 12

    oData v4(6.1.0)在$ expand中嵌套$ filter

  13. 13

    odata4 $ filter返回错误结果

  14. 14

    如何在服务器端Blazor中自定义ASP.NET Core身份?

  15. 15

    IExceptionFilter处理程序在ASP.NET Core 3.1 Blazor(服务器端)中不起作用

  16. 16

    如何在ASP.net Core中实现dataTables服务器端分页/搜索/排序

  17. 17

    在ASP.NET Core WebAPI中获取OData计数

  18. 18

    Odata ASP.NET Core 2.2 Web API分页

  19. 19

    .Net Core 3.1中的OData路由/路径问题

  20. 20

    如何在oData .Net Core 3.1中启用$ levels

  21. 21

    如何在.Net Core OData中添加后处理?

  22. 22

    angular2 + web.api2:从服务器端(不是asp.net核心)注入防伪令牌

  23. 23

    Web API 2 Odata V4 PATCH返回404

  24. 24

    ASP Net Core 1 RC2 AccountController注入

  25. 25

    带有Odata-V4和Dapper的WebApi-服务器端过滤

  26. 26

    如何在ASP.NET Core 3.1 MVC中进行RequiredIf客户端和服务器端验证?

  27. 27

    Web Api oData v4 $ ref 404或服务器错误

  28. 28

    Web Api oData v4 $ ref 404或服务器错误

  29. 29

    在构建服务器上构建.NET Core 1.0 RC2应用

热门标签

归档