2016-08-31 14 views
0

私は、OdataControllersを使用してASP.NET Web API 2 Webサービスを作成しています。EnableQueryAttributePageSizeプロパティを使用してページサイズを設定する方法を見つけました。 Webサービスのユーザーがapp.configでページサイズを設定してから、アプリケーションにこの設定を読み込ませてページサイズを設定させたいと考えています。問題は、属性を使用するにはPage Sizeがコンパイル時定数に設定されている必要があることです。属性のWebAPIアプリケーションで実行時にOData結果ページサイズを設定する

使用法:

[EnableQuery(PageSize = 10)] 
public IHttpActionResult GetProducts() 
{ 
    return repo.GetProducts(); 
} 

は私が見てきた一つの提案された解決策はEnableQueryAttributeを構築し、この

int customSize = ReadPageSizeSettingFromConfigFile(); 

var attr = new EnableQueryAttribute { PageSize = customSize }; 
config.AddODataQueryFilter(attr); 

ようHTTPConfiguration設定オブジェクトにそれを設定することですが、これは実際には動作しません。 。 HttpConfigurationのFilterコレクションは空のままです。

config object watch view

(コメントの一覧に埋もれて)別のポストにコメントがすべてEnableQueryは、コントローラの属性が、それはどちらかの効果がありません削除を提案しました。 EnableQuery属性が古いQueryable属性を置き換えたので、これはMicrosoftの問題であるかどうか疑問に思っています。

この質問は前に尋ねたと答えていないされています:How limit OData results in a WebAPI

すべてのヘルプは大歓迎です。

localhost/odata/Customers?$top=10&$skip=10 

について動的に設定ページサイズ:

public class MyEnableQueryAttribute : EnableQueryAttribute 
{ 
    public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions) 
    { 
     int pagesize = xxx; 
     var result = queryOptions.ApplyTo(queryable, new ODataQuerySettings { PageSize = pagesize }); 
     return result; 
    } 
} 

+0

にMaxTopための設定を設定することができます。ユーザーはweb-apiリクエストを行い、そのapiリクエストでapp.configファイルを変更しますか?良いアイデアだと確信していますか? –

+0

私は明確にするために私の質問を拡大しました。私はapp.configから値を読み込み、実行時に設定したいと思います。 – cl0h

答えて

1

あなたは、クライアントがページサイズが10で欲しい、と2ページ目をしたい場合は、あなたの目標を達成するために$トップを使用して$スキップすることができますコントローラーメソッドにこの属性を設定します。

+0

私はOData構文を認識しています。私は、**クライアントが**サーバーから要求することが許可されているデータの量を(ページサイズによって)制限したいと思います。 – cl0h

+0

あなたは、更新された答え –

+0

これは私を正しい軌道に乗せました。ありがとう。 – cl0h

1

あなたは少し混乱webApiConfigのresgister方法

public static class WebApiConfig{ 
     public static void Register(HttpConfiguration config){ 
      config.Select().Expand().Filter().OrderBy().MaxTop(100).count() // you can change max page size here 
     } 
} 
関連する問題