Переопределить AutoQuery MaxLimit на заданной конечной точке - PullRequest
2 голосов
/ 07 июня 2019

Если для автозапроса установлен максимальный предел:

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

Есть ли способ переопределить это в конкретной конечной точке службы, где я переопределяю автозапрос?

Я хочу, чтобы это было принудительно установлено для всех общедоступных конечных точек, но на стороне администратора я хочу иметь возможность получать столько данных, сколько мне нравится, но когда я внедряю объект AutoQuery в сервис, я не вижу способа переопределить ограничение в запросе .

1 Ответ

2 голосов
/ 07 июня 2019

Вам потребуется создать Пользовательскую реализацию AutoQuery , где вы можете переопределить выражение SQL, генерируемое AutoQuery, например:

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);
...