1

我有课:

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual DateTime BirthDate { get; set; }
}

我有 WebAPI OData 控制器:

public class PeopleController : ODataController
{
    [Queryable]
    [HttpGet]
    public IQueryable<Person> Get()
    {
        return (new MyEfContext()).People;
    }
}

另外我在 global.asax 中有下一个代码:

ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Person>("Person");
config.Routes.MapODataRoute(
            routeName: "MainModelQueryOdata",
            routePrefix: "query/main",
            model: modelBuilder.GetEdmModel(),
            pathHandler: new DefaultODataPathHandler(),
            batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer),
            routingConventions: conventions);

我想对非管理员隐藏属性 BirthDate 并且当当前用户不是那个人时。如何在 ASP.NET WebAPI OData 中更好地实现它?我有 CurrentUserId 与 person.Id 进行比较,我有 CurrentUserIsAdmin 标志要检查。问题是我无法通过 modelBuilder 向 Odata 模型添加条件,因为不支持这种行为 - 我只能为每个人完全删除实体或属性,但我需要将其展示给管理员和人们自己。

4

1 回答 1

1

我认为动态模型是您所需要的。

检查此示例代码: https ://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/DynamicEdmModelCreation/ReadMe.txt

于 2014-08-02T15:14:43.987 回答