【发布时间】:2020-01-06 11:59:31
【问题描述】:
我们使用的是 Microsoft.AspNet.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 框架似乎不会自动处理这个问题。因此,我现在的任务是确保搜索字符串被后端解码。
我已经研究过扩展端点以接受 ODataQueryOptions(见下文),但我不知道如何更改过滤器字符串并将其重新包装回 ODataQueryOptions 对象:
public IHttpActionResult Get(ODataQueryOptions<ProcessModel> queryOptions)
{
var allProcesses= _service.GetAllProcesses();
queryOptions.ApplyTo(allProcesses);
return Ok(allProcesses);
}
我唯一的选择是重写我的服务函数以接受过滤器参数并自己实现过滤吗?
【问题讨论】:
-
如果我理解正确,你应该创建一个新的 HttpRequestMessage 来应用。使用过滤器查询字符串构建您的字符串并创建一个新的 HttpRequestMessage。 You can ref here