Фильтр запросов Web.Filter.QueryFilterAttribute используется для настройки условий в методах добавления, изменения, удаления и запроса данных.
[Route("api/[controller]/[action]")]
[ApiController]
[QueryFilter]
public class AreaController: MyBaseController<Area>
[HttpGet]
public Result List([FromQuery] Dictionary<string, string> where)
{
return Result.Success("succeed").SetData(bll.Query(where));
}
}
В QueryFilterAttribute есть встроенные предустановленные параметры запроса:
Для методов запроса «list» и «query»:
a) Если информация о пользователе содержит tenantId, это означает, что пользователь принадлежит нескольким арендаторам. Тогда условие запроса where будет включать tenantId для фильтрации данных по арендатору. Это значение по умолчанию.
b) Если пользователь уже вошёл в систему, а роль не начинается с «admin», то пользователь является обычным пользователем. Условие запроса where будет содержать userId для фильтрации данных пользователя. Это значение по умолчанию.
c) Если клиент не передал параметр сортировки sort, то сортировка будет установлена по полю Added_time в порядке убывания. Это значение по умолчанию.Для метода удаления «delete» и метода запроса get:
a) Если информация о пользователе содержит tenantId, то пользователь принадлежит нескольким арендаторам. Условие запроса where будет включать tenantId для фильтрации данных по арендатору. Это значение по умолчанию.
b) Если пользователь уже вошёл в систему, а роль не начинается с «admin», то пользователь является обычным пользователем. Условие запроса where будет содержать userId для фильтрации данных пользователя. Это значение по умолчанию.
c) Если пользователь уже вошёл в систему, а его роль не начинается с «admin», то он является обычным пользователем. Условие запроса where добавит Sys = false для фильтрации удаления системных данных. Значение Sys = true указывает на системные данные. По умолчанию обычные пользователи не могут удалять системные данные, а также получать их.
/api/area/list?sort=-Id&name=武汉&pageNo=1
sort — порядок сортировки, формат: +|-поле, например, -Id для сортировки по Id в порядке убывания, +Id для сортировки по Id в порядке возрастания. Можно использовать несколько полей для сортировки, например, +Id,-Added_time. Обратите внимание, что имена полей должны соответствовать именам свойств в классе сущности и сохранять регистр.
pageNo — номер страницы запроса; <=0 означает запрос всех данных, по умолчанию 1.
pageSize — количество элементов на странице; <=0 означает запрос всех данных, по умолчанию 12.
Условие запроса, формат: поле__оператор=значение. Например, «parent.id__eq=1». Если оператор не указан, используется eq по умолчанию, например: parent.id=1 эквивалентно parent.id__eq=1. Обратите внимание, что имена полей должны совпадать с именами свойств в классе сущности и сохранять регистр.
Операторы запроса включают: contains — содержит, eq — равно, ne — не равно, gt — больше, gte — больше или равно, lt — меньше, lte — меньше или равно, in — содержит, between — между. При использовании оператора in значения разделяются символом ",", например, "id__in=1,2,3".
/api/area/get/1
/api/area/delete/1
или
/api/area/delete?id=1
/api/area/delete/1,2,3
или
/api/area/delete?id=1,2,3
/api/area/delete?name=武汉
[Route("api/[controller]/[action]")]
[ApiController]
[QueryFilter]
public class AreaController: MyBaseController<Area>
[HttpPost]
public Result Add(Area o)
{
return ModelState.IsValid ? (bll.Add(o) ? Result.Success("添加成功") : Result.Error("添加失败")) : Result.Error("添加失败!" + ModelState.GetAllErrMsgStr(";")); ;
}
}
QueryFilterAttribute имеет встроенные предустановленные параметры запроса:
Если параметр метода действия реализует интерфейс IUser, и пользователь вошёл в систему, то устанавливается значение UserId для параметра метода. Также устанавливается флаг для данных, указывающий на то, что действие было выполнено вошедшим в систему пользователем.
//автоматическое добавление user id
if (typeof(IUser).IsAssignableFrom(parameterType))
{
var model = context.ActionArguments[parameterName] as IUser;
if (userId != 0)
{
model.UserId = userId;
}
}
Если параметр метода действия реализует интерфейс ITenant, и пользователь вошёл в систему и арендатор TenantId существует, то устанавливается значение TenantId для параметра метода. Также устанавливается флаг для данных, указывающий на то, что действие было выполнено арендатором.
//автоматическое добавление tenant id
if (typeof(ITenant).IsAssignableFrom(parameterType))
{
var model = context.ActionArguments[parameterName] as ITenant;
if (TenantId != 0)
{
model.TenantId = TenantId;
}
}
Если параметр метода действия реализует интерфейс ISys, то автоматически устанавливаются следующие значения:
- Modify_time — время модификации, равное текущему времени.
- Если роль пользователя начинается с «admin», это означает, что он является администратором. Тогда для параметра модели устанавливается значение Sys, указывающее на системный ресурс.
- Если роль пользователя не начинается с «admin», это означает, что он не является администратором. Тогда для параметра модели устанавливается значение false, указывающее на несистемный ресурс.
//если это тип ISys, добавить системный ресурс
if (typeof(ISys).IsAssignableFrom(parameterType))
{
var model = context.ActionArguments[parameterName] as ISys;
model.Modify_time = DateTime.Now;
//добавить системный ресурс несистемные администраторы или нешкольные администраторы, студенты, учителя добавляют ресурсы как несистемные ресурсы. системные администраторы, школьные администраторы добавляют ресурсы как системные ресурсы
if (role.StartsWith("admin"))
{
model.Sys = true;
}
else
{
model.Sys = false;
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )