使用OData Controller和ODataQueryOption以及实体框架,我们可以提到我们需要通过实体框架从数据库中检索哪些字段。在$ select参数中,我们可以指定字段。
$select: 'Id,PersonnelNumber,FirstName,LastName,Gender,MaritalStatus,Department/Code,Department/Name',
$expand: 'Department'
如您所见,也可以指定要检索的相关对象(在本例中为 Department ),在$ expand参数中提及。
问题是,这个选项是否准备安全问题?因为它可以在客户端提供,任何人都可以添加另一个参数并检索无权查看的数据。 例如,我可以将 PayRoll 添加到$ expand参数并检索人员的工资。
$expand: 'PayRolls'
我们如何处理ODataQuery选项和OData控制器中的这个功能?
由于
答案 0 :(得分:1)
我认为NonExpandableAttribute
可以满足您的要求。
例如,您可以将以下属性放在您不希望客户展开的属性上:
public class Customer
{
public int ID { get; set; }
[NotNavigable]
[NotExpandable]
public PayRollType PayRolls{ get; set; }
}
使用常规模型构建器构建EdmModel后,将无法查询:
~/odata/Customers?$expand=PayRolls
有错误消息: “URI中指定的查询无效。属性'PayRolls'不能在$ expand查询选项中使用。”