c# - 如何将过滤器选项从 ODataQueryOptions 映射到 RestRequest

标签 c# odata dynamics-crm-2011 dynamics-crm dynamics-crm-2016

我需要能够从 ODataQueryOptions 进行转换至 RestRequest为了能够发出带有指定过滤器的 RestRequest,并创建了以下辅助类:

public static class ODataQueryFilterToRestClient
{
    public static RestRequest Map(ODataQueryOptions odataQuery)
    {
        var restRequest = new RestRequest();

        if (odataQuery.Filter != null)
        {
            restRequest.AddQueryParameter(@"$filter", odataQuery.Filter.RawValue);
        }

        if (odataQuery.Top != null)
        {
            restRequest.AddQueryParameter(@"$top", odataQuery.Top.RawValue);
        }

        if (odataQuery.Skip != null)
        {
            restRequest.AddQueryParameter(@"$skip", odataQuery.Skip.RawValue);
        }

        if (odataQuery.OrderBy != null)
        {
            restRequest.AddQueryParameter(@"$orderby", odataQuery.OrderBy.RawValue);
        }
        //etc
        return restRequest;
    }
}

鉴于 OdataQueryOptions 支持以下内容:

enter image description here

是否有更简单的方法在 ODataQueryOptions 到 RestClient 或其他 rest 客户端代理之间进行转换?

附带说明一下,我不知道是否有比 ODataQueryOptions 更好的方式通过 Controller 接受参数?

最佳答案

RestSharp 不直接支持ODataQueryOptions

还有其他专门为使用 OData 进行查询而设计的客户端,例如Simple.OData.Client .但是,它也不使用 ODataQueryOptions 来处理请求,提供流畅的 API。

总体而言,ODataQueryOptions 在服务器端用于 OData 兼容的 RESTful API。客户端(包括 RestSharp)仅使用其常规语法来提供请求数据。

所以回答你的问题(有没有更简单的方法......) - 不,没有。

但是您的转换方法看起来不错而且非常简单。如果我必须为给定的 ODataQueryOptions 使用 RestSharp 进行调用,我会以完全相同的方式执行此操作。

关于c# - 如何将过滤器选项从 ODataQueryOptions 映射到 RestRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43266322/

相关文章:

c# - 数据访问层的静态方法与依赖注入(inject)

c# - 一个带有 Serilog 的记录器的多个过滤器

asp.net-mvc - 在 Odata 查询的 $expand 中使用 $filter

dynamics-crm-2011 - MS-CRM 2013 无效的当事人对象类型 9

c# - Dynamics CRM Online 对象缓存未正确缓存

c# - 弃用 Dynamics CRM 中的选项列表项目

c# - waveOutPrepareHeader 返回 INVALPARAMS

C# Sql 更新数据库

linq - 查询 SharePoint OData 服务时在 LINQ 中使用日期比较

asp.net-web-api - 网络 API 2 : OData 4: Actions returning 404