2016-12-02 8 views
1

私が作成したWeb API OData v4サービスがあります。Web API OData関数(TimeSpan)

var getProduction = builder.EntitySet<ProductDTO>("Products").EntityType.Collection.Function("GetProduction"); 
     getProduction.Namespace = "ProductsService"; 
     getProduction.ReturnsCollection<ProductionRecordDTO>(); 
     getProduction.Parameter<DateTimeOffset>("StartDate"); 
     getProduction.Parameter<DateTimeOffset>("EndDate"); 
     getProduction.Parameter<TimeSpan>("SampleInterval"); 
:それは以下のようにODataのモデルビルダーで構成された

public IQueryable<ProductionRecordDTO> GetProduction(
     [FromODataUri]DateTimeOffset startDate, 
     [FromODataUri]DateTimeOffset endDate, 
     [FromODataUri]TimeSpan sampleInterval) 

:私は以下に似たODataのコントローラで定義されたシグネチャを持つのTimeSpanパラメータを持つバインド機能を作成しようとしています

モデルを実行すると、モデルが正しく作成されたように見えます。メタデータの説明には、 "SampleInterval"がEdm.Durationタイプとして適切に定義されていることが示されています。

私のようなURLでただし、このメソッドを呼び出そうと

http://dev-pc/odata/Products/ProductsService.GetProduction(StartDate=2014-01-01T00:00:00Z, EndDate=2017-01-01T00:00:00Z, SampleInterval=P1Y) 

ODataExceptionがメッセージ「SampleInterval = P1Y」でスローされ、スコープではありません。 ISO 8601のフォーマットのバリエーションごとに同じことが言えます。使用

  • Microsoft.OData.Coreを - v6.15.0
  • Microsoft.AspNet.OData - v5.9.1

提供どのような援助を大幅に理解されるであろう。

答えて

1

原因を見つけました。 Edm.Durationのパラメータは、文字通り解釈することはできません。 duration'P1D'この場合、正しい呼び出しがあったであろう:言っ

http://dev-pc/odata/Products/ProductsService.GetProduction(StartDate=2014-01-01T00:00:00Z, EndDate=2017-01-01T00:00:00Z, SampleInterval=duration'P1D') 

、Microsoftの実装は、日を超える定期的な種類を受け入れていないようです。 P1W,P1MおよびP1Yはすべて拒絶される。

関連する問題