2017-04-06 81 views
5

我需要能够从ODataQueryOptions转换为RestRequest,以便能够发出与指定的过滤器RestRequest,并创建了以下辅助类:如何映射来自ODataQueryOptions过滤器选项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,或其他休息客户端代理?

在附注中,我不知道是否有更好的方式通过控制器接受参数比ODataQueryOptions更好?

+0

据我所知,你想在另一台服务器上调用另一个API。如果是这种情况,你应该检查该API的文档。如果它不是OData我怀疑它会接受$ filter,$ select。 – ErvinS

+0

你现在的方法到底是什么问题?这只是一个方法调用。你怎么想像更简单的东西? –

回答

7

RestSharp没有ODataQueryOptions的直接支持。

还有其他客户端专门设计用于查询OData,例如, Simple.OData.Client。但是它也不适用于ODataQueryOptions的请求,提供流畅的API。

整体ODataQueryOptions相当于在兼容RESTful API的服务器端使用OData。客户(包括RestSharp)只是使用它们的常规语法来提供请求的数据。

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

但是,您的转换方法看起来不错,很简单。如果我必须打电话RestSharp给定ODataQueryOptions,我会这样做完全相同的方式。

相关问题