筛选后的Asp.Net核心ODATA计算属性

时间:2019-10-10 09:31:22

标签: asp.net-core odata

在处理完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;

0 个答案:

没有答案