У меня есть новый сервис OData, использующий Microsoft.AspNet.OData 6.1.0.Мой контроллер 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