覆盖特定端点上的自动查询最大限制

Override AutoQuery MaxLimit on specifc endpoint

如果在启动时为自动查询设置了最大限制:

Plugins.Add(new AutoQueryFeature { MaxLimit = 100 });

有没有办法在我覆盖自动查询的特定服务端点覆盖它?

我希望对所有 public 端点强制执行此操作,但在管理方面,我希望能够获得尽可能多的数据,但是当我将 AutoQuery 对象注入服务时,我看不到任何方法覆盖查询限制。

您需要创建一个 Custom AutoQuery Implementation,您可以在其中覆盖 AutoQuery 生成的 SQL 表达式,例如:

public class MyQueryServices : Service
{
    public IAutoQueryDb AutoQuery { get; set; }

    //Override with custom implementation
    public object Any(FindMovies query)
    {
        var q = AutoQuery.CreateQuery(query, base.Request);
        q.Take(CustomLimit);
        return AutoQuery.Execute(query, q);
    }
}

或者,您也可以使用 AutoQuery Filter:

来覆盖限制
var autoQuery = new AutoQueryFeature()
    .RegisterQueryFilter<FindMovies, Movie>((q, dto, req) => {
        if (req.GetSession().HasRole(RoleNames.Admin, req.TryResolve<IAuthRepository>())
        {
            q.Take(CustomLimit);
        }
    });

Plugins.Add(autoQuery);