标签: queryinterceptor

操作而不是查询拦截器(WCF数据服务)

我正在阅读有关查询拦截器的内容.我很失望,因为那更像是过滤器而不是拦截器.换句话说,您可以收集包含记录或不包括它们.例如,您无法修改记录.

如果我想为我的实体创建一个查询拦截器,我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)

放置此方法而不是查询拦截器使我的服务行为完全相同.另外,我有更多的力量!采用这种方法是更好的解决方案吗?

c# security wcf-data-services queryinterceptor

4
推荐指数
1
解决办法
680
查看次数

OData Web API 查询拦截器

OData 端点是使用 ASP.NET Web API 2.0 创建的

尝试在 ODataController 中创建一个查询拦截器,如下面的代码所示:

public class AVMItemController : ODataController
{
    ADWAppContext sampleADW = new ADWAppContext("Server=XXX;Database=XXX;User ID=XXX;password=xxx;Trusted_Connection=false;Encrypt=true");

    // GET: odata/AVM
    [EnableQuery(PageSize=25)]
    public IQueryable<ADWAppContext.AVMItem> GetAVMItems()
    {
        return sampleADW.AVMItems.AsQueryable<ADWAppContext.AVMItem>();
    }

    [QueryInterceptor("AVMItems")]
    public Expression<Func<ADWAppContext.AVMItem, bool>> FilterAVMItems()
    {
        return avm => avm.avmId > 1000;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有 OData 查询的处理都没有考虑 Query Interceptor 中提到的谓词。我在查询拦截器方法中有一个从未命中的断点。

asp.net odata asp.net-web-api asp.net-web-api2 queryinterceptor

0
推荐指数
1
解决办法
954
查看次数