Ton*_*Nam 4 c# security wcf-data-services queryinterceptor
我正在阅读有关查询拦截器的内容.我很失望,因为那更像是过滤器而不是拦截器.换句话说,您可以收集包含记录或不包括它们.例如,您无法修改记录.
如果我想为我的实体创建一个查询拦截器,我Users可以这样做:
[QueryInterceptor("Users")] // apply to table users
public Expression<Func<User, bool>> UsersOnRead()
{
return cust => cust.IsDeleted == false;
}
Run Code Online (Sandbox Code Playgroud)
如果我改为创建操作怎么办: 注意非常重要的是操作名称只有实体名称,否则它将无法工作
[WebGet]
public IEnumerable<User> Users()
{
return this.CurrentDataSource.Users.Where(x=>x.IsDeleted==false);
}
Run Code Online (Sandbox Code Playgroud)
放置此方法而不是查询拦截器使我的服务行为完全相同.另外,我有更多的力量!采用这种方法是更好的解决方案吗?
我用这个玩了一下,其中一个问题是导航属性不会被过滤.假设您有一个名为SalesPeople的实体,该实体具有IEnumberable of Customers的链接
如果你这样做
[QueryInterceptor("Customers")] // only show active customers
public Expression<Func<Customers, bool>> ActiveCustomers()
{
return cust => cust.IsDeleted == false;
}
Run Code Online (Sandbox Code Playgroud)
当您像WCFDataService.svc/SalesPeople一样查询OData供稿时?$ expand =客户为客户设置的结果仍将应用过滤器.
但是这个
[WebGet]
public IQueryable<Customers> Customers()
{
return this.CurrentDataSource.Customers.Where(x=>x.IsDeleted==false);
}
Run Code Online (Sandbox Code Playgroud)
当运行的OData查询像WCFDataService.svc /客户,你将有活跃的客户筛选的列表,但运行这个WCFDataService.svc /销售人员时?$ =拓展客户,为客户将包括删除客户设置的结果.
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |