Как передать параметры DateTimeOffset в функции oData
У меня есть функция odata с именем GetForPeriod, определенная как:
var getForPeriod =
builder.EntityType<EventModel>()
.Collection
.Function("GetForPeriod")
.ReturnsCollection<EventModelSummary>();
getForPeriod.Parameter<DateTimeOffset>("from");
getForPeriod.Parameter<DateTimeOffset>("to");
Итак, чтобы получить результаты от функции, мне нужно вызвать:
http://localhost:17257/odata/Events/Default.GetForPeriod(from=2015-12-27T00:00:00-06:00,to=2016-02-06T00:00:00-06:00)
Но я продолжаю получать сообщение об ошибке:
От клиента было обнаружено потенциально опасное значение Request.Path (:).
Проблема в датах, как будто я делаю http://localhost:17257/odata/Events/Default.GetForPeriod(from=null,to=null)
Я получаю сообщение об ошибке, утверждающее, что он не может преобразовать ноль в DateTimeOffset (что имеет смысл).
Я попытался заменить двоеточие (:) в значениях from и два на % 3A, но я все еще получаю ту же опасную ошибку пути.
Интересно, что если я называю путь чтения событий с фильтром даты, он работает нормально.http://localhost:17257/odata/Events?$filter=ScheduledDate%20ge%202015-12-27T00:00:00-06:00%20and%20ScheduledDate%20le%202016-02-06T00:00:00-06:00
Как я должен вызывать функцию OData, которая принимает смещение даты и времени для параметра?
2 ответа
Не могли бы вы попробовать псевдоним параметра функции?
Из спецификации OData:
Псевдоним параметра может использоваться вместо встроенного параметра для вызова функции. Значение для псевдонима указывается в качестве отдельной опции запроса, используя имя псевдонима параметра.
Пример 76: вызвать функцию Sales.EmployeesByManager через функцию import EmployeesByManager, передав 3 для параметра ManagerID
http://host/service/EmployeesByManager(ManagerID=@p1)?@p1=3
Эта же проблема отслеживается на https://github.com/OData/WebApi/issues/204
Благодарю.
Добавьте это в ваш файл web.config.
<system.web>
<httpRuntime requestPathInvalidCharacters="%" />
</system.web>
Мне пришлось создать web.config
файл со следующим содержанием:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>
</configuration>