У меня есть служба API OData v4, которую я создал. Я пытаюсь создать связанную функцию, которая имеет параметр TimeSpan, имеющий подпись, определенную в контроллере OData, аналогичный приведенному ниже:Функция веб-API OData с TimeSpan
public IQueryable<ProductionRecordDTO> GetProduction(
[FromODataUri]DateTimeOffset startDate,
[FromODataUri]DateTimeOffset endDate,
[FromODataUri]TimeSpan sampleInterval)
Он выполнен в модели строитель OData, как показано ниже:
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");
При запуске модель, по-видимому, правильно создана, описание метаданных показывает, что «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
Любая помощь, оказываемая было бы весьма признателен.