在处理完ODATA过滤器之后,是否可以在ODATA HTTP请求上创建计算属性?
我有以下型号
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)
属性似乎并未将其从模型中排除。
我已经设法通过检查控制器中的查询字符串来手动排除该属性。但是该属性仍包含在模型中,该值为null,并且显然在应用任何过滤器之前就会运行该属性。
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;