2016-01-12 5 views
0

У меня есть функция OData называется GetForPeriod определяется как:Как передать параметры DateTimeOffset к функциям OData

 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 (который имеет смысл).

Я попытался заменить двоеточие (:) в пределах от и два значения до % 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, которая принимает смещение datetime для параметра?

ответ

2

Не могли бы вы попробовать псевдоним параметра функции?

От OData спецификации:

Параметр псевдоним может быть использован вместо параметра строкового для вызова функции. Значение для псевдонима указано как отдельный параметр запроса, используя имя псевдонима параметра.

Пример 76: вызовите функцию Sales.EmployeesByManager с помощью функции импорта EmployeesByManager, проходя 3 для параметра ManagerID

http://host/service/EmployeesByManager([email protected])[email protected]=3 

Та же проблема отслеживается на https://github.com/OData/WebApi/issues/204

спасибо.

+0

идеально, благодаря – sheamus

0

Добавьте это в свой файл web.config.

<system.web> 
    <httpRuntime requestPathInvalidCharacters="%" /> 
</system.web> 
+0

Кажется маловероятным, потому что 'фильтр = ScheduledDate% 20' URL работает в OP, в то время как их' GetForPeriod' не имеет% с и не работает. Обратите внимание, что это влияет на настройки вашего [всего сайта] (http://www.cryer.co.uk/brian/mswinswdev/ms_aspnet_server_error_potentially_dangerous_request_path.htm). – Noumenon

 Смежные вопросы

  • Нет связанных вопросов^_^