覆盖特定端点上的自动查询最大限制
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);
如果在启动时为自动查询设置了最大限制:
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);