Мне нужно было реализовать некоторую бизнес-логику на стороне сервера в процессе выборки сущностей, чтобы гарантировать, что у пользователя есть разрешение на извлекаемый элемент.
Для этого мой код запроса бриза на стороне клиента изменился примерно так:
var query = breeze.EntityQuery
.from(theUrl)
.expand("RelatedEntity")
.where(breeze.Predicate.create("id", "==", id));
to:
var query = breeze.EntityQuery
.from(theUrl)
.withParameters({ id: id })
.expand("RelatedEntity");
На стороне сервера действие моего контроллера изменилось с:
[HttpGet]
[BreezeQueryable]
public IQueryable<MyEntity> MyEntities()
{
return _uow.MyEntityRepo.All();
}
на что-то вроде:
[HttpGet]
[BreezeQueryable]
public IHttpActionResult FindById(int id)
{
var userId = HttpContext.Current.User.Identity.GetUserId();
var hasPermission = CheckPermission(id, userId); // some implementation ...
if (hasPermission) {
var myEntity = _uow.MyEntityRepo.GetById(id);
return Ok(myEntity)
} else {
return NotFound();
}
}
Я вижу, что запрос попадает в сеть с фильтром:
http://localhost:42789/breeze/MyEntity/FindById?$expand=RelatedEntity&id=1002
Однако RelatedEntity
не определено. При использовании EntityQuery
, но не withParameters
, связанный объект прекрасно расширяется и доступен в наборе результатов.
Спасибо