Есть ли способ создать вычисляемое свойство по HTTP-запросу ODATA после обработки фильтра ODATA?
У меня есть следующая модель
class Person
{
public string Name { get; set; }
public string Email { get; set; }
public string ImageLink { get; set; } //This is computed
}
И следующие IEdmModel
private static IEdmModel GetEdmModel(IApplicationBuilder app)
{
var builder = new ODataConventionModelBuilder(app.ApplicationServices).EnableLowerCamelCase();
var person = builder.EntitySet<Person>("People").EntityType;
person.Property(x => x.Name);
person.Property(x => x.Email);
person.Property(x => x.ImageLink).IsOptional();
return builder.GetEdmModel();
}
Ссылка на изображение генерируется динамически и является довольно дорогостоящим процессом, так как ссылка подписана. Есть ли способ добавить только добавить это свойство, если оно явно включено $select
, и производить вычисления только после применения фильтра?
Установка свойства Select(SelectExpandType.Allowed)
, по-видимому, не исключает его измодель.
Мне удалось вручную исключить свойство, проверив строку запроса в контроллере. Но свойство все еще включено в модель, значение равно нулю, и, очевидно, оно запускается до применения какого-либо фильтра.
var people = await _personService.FetchAllPeopleAsync(cancellationToken);
if (Request.Query.TryGetValue("$select", out var values) &&
values.Any(v => v.Contains(nameof(Person.ImageLink))))
{
return _photoService.AttachImageLinks(Url, people);
}
return people;