我有一个使用Microsoft.AspNet.OData 6.1.0的新OData服务。我的OData控制器包含一个方法
[EnableQuery]
public IHttpActionResult Get(ODataQueryOptions<AssignmentGroupDto> queryOptions)
{
// validate the query.
try
{
queryOptions.Validate(_validationSettings);
}
catch (ODataException ex)
{
return BadRequest(ex.Message);
}
var allAssignmentGroups = ApiService.GetAssignmentGroups();
return Ok(allAssignmentGroups);
}
我的DTO装饰有过滤器属性
[Count]
[Filter(new[] {"AssignmentListId","TourCode" })]
[OrderBy]
[Select]
[Expand("Participants")]
[Page(MaxTop = 1000)]
public partial class AssignmentGroupDto { ... }
当我尝试使用OData URL调用此方法
https://localhost/api/V2AssignmentGroups?$filter=(AssignmentListId eq 7182) and (TourCode eq 'TSWKYKP')&$count=true
通常可以,但是偶尔我会得到错误
The property 'AssignmentListId' cannot be used in the $filter query option.
如何进一步调试?问题的间歇性使我相信,这可能是由于某种形式的元数据缓存引起的(在检查过滤器权限之前未读取Filter属性,因此权限被拒绝)。我是否可以清除任何缓存以测试该理论?抛出此错误后,我还能记录更多信息吗?
我检查了被调用的URL是否相同。上面的URL是从AppInsights日志中复制的,用于失败的请求。这是来自成功的请求:
https://localhost/api/V2AssignmentGroups?$filter=(AssignmentListId eq 7182) and (TourCode eq 'TSWKYKP')&$count=true