我有一个web api 2应用程序,在我的控制器中,我有这个代码:
[Queryable]
public IQueryable<Title> GetTitles()
{
return db.Titles;
}
这是标题实体:
public partial class Title
{
public Title()
{
this.People = new HashSet<Person>();
}
public short Id { get; set; }
public string NameT { get; set; }
public virtual ICollection<Person> People { get; set; }
}
当人们查询标题时,他们必须只获得“NameT”属性。但现在他们得到了所有的财产。是的,我知道$ select,但我想要另一种方式。意味着即使他们使用$ select,他们也不应该获得“Id”属性。如果我需要提供更多信息,请告诉我。感谢。
答案 0 :(得分:0)
也许您可以在行动中GetTitles()
过滤,例如:
[Queryable]
public IQueryable<Title> GetTitles()
{
return db.Titles.Select(t=>t.Name);
}
答案 1 :(得分:0)
使用ODataController时,有两种方法可以解决您的问题。但是,它们不会影响ApiController非查询部分。
在这种情况下,你可以试试Zoe的建议。
1.使用模型构建器构建模型时忽略这些属性。
builder.EntityType<Title>().Ignore(title => title.Id);
2.在这些属性上添加忽略成员属性。
[IgnoreDataMember]
public short Id { get; set; }
除此之外,我们还支持在Web API 2.2中为OData v4.0限制允许的查询集。
我们可以在模型中的类型属性上使用Unsortable,NonFilterable,NotExpandable或NotNavigable等属性,或者我们可以在模型构建器中显式配置它。
答案 2 :(得分:0)
使用ODataModelBuilder类而不是ODataConventionModelBuilder类。
var modelBuilder = new ODataModelBuilder();
var titles = modelBuilder.EntitySet<Title>("titles");
var title = titles.EntityType;
title.HasKey(x => x.Id);
title.Ignore(x => x.Id);
title.Property(x => x.TName);
titles.HasIdLink(x => { return x.GenerateSelfLink(true); }, true);
config.Routes.MapODataRoute("odata", "odata", modelBuilder.GetEdmModel());