Мы используем Microsoft.As pNet .OData, и наши контроллеры выглядят так:
namespace Backend.api.Process
{
public class OdataProcessController: ODataController
{
private readonly IProcessService _service;
public OdataProcessController(IProcessService service)
{
_service = service;
}
[EnableQuery]
public IHttpActionResult Get()
{
return Ok(_service.GetAllProcesses());
}
}
}
Однако некоторые из наших процессов имеют имена, которые включают специальные символы (например, "&") , которые должны быть URL-кодированы перед отправкой бэкэнда при поиске. Это не похоже на то, что ASP. Net Odata Framework автоматически обрабатывает это. Поэтому теперь моя задача - убедиться, что строка поиска декодирована бэкендом.
Я рассмотрел расширение конечной точки для приема ODataQueryOptions (см. Ниже), но я не могу понять, как изменить строку фильтра и перемотать его обратно в объект ODataQueryOptions:
public IHttpActionResult Get(ODataQueryOptions<ProcessModel> queryOptions)
{
var allProcesses= _service.GetAllProcesses();
queryOptions.ApplyTo(allProcesses);
return Ok(allProcesses);
}
Является ли мой единственный вариант переписать мою сервисную функцию, чтобы принять параметр фильтра и сам выполнить фильтрацию?