Как передать параметры 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>
Другие вопросы по тегам