将计算值添加到OData结果

时间:2015-12-30 13:01:19

标签: asp.net-web-api odata asp.net-web-api-odata odata-v4

我试图在数据结果中添加一些信息,无论用户是否具有对该实体的读取或写入权限。

让我们假设我有这个实体:

public class Foo
{
   public int Id { get; set; }
   public string Name { get; set; }
   public virtual ICollection<Access> AccessRights { get; set; }
}

AccessRights保存用户ID以及是否具有读/写访问权限。

目前我只是$expand AccessRights并计算用户是否在前端具有读/写访问权限。但是,我希望将此计算属性添加到结果中。

json结果示例:

{
   id: 1,
   name: "foo",
   hasReadAccess: true,
   hasWriteAccess: true
}

有可能这样做吗?请注意,HasRead/WriteAccess在模型上不存在,也不应该存在。

1 个答案:

答案 0 :(得分:0)

您需要将模型拆分为两个:数据访问模型(从数据访问层获得的内容)和数据传输模型(作为响应发送的内容)。

假设您当前的Foo类作为数据访问模型,您只需要定义另一个类FooResponse(或任何适合您的名称),如下所示。

public class FooResponse
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool HasReadAccess { get; set; }
    public bool HasWriteAccess { get; set; }
}

然后定义一个转换函数,该函数从Foo个实例映射到FooResponse个实例。 AutoMapper是这项工作的好工具。