Когда OData применяет ODataQueryOptions в .NET 8?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Когда OData применяет ODataQueryOptions в .NET 8?

Сообщение Anonymous »

Помогите понять, когда Odata применяет параметры запроса к IQueryable?
Задача такая: необходимо перед этим получить результат выполнения запроса в базу данных отправка его клиенту.

Я использую .NET 8.0 и Microsoft.AspNetCore.OData 9.0.0
Я пробую классическую реализацию применения queryOptions через .ApplyTo(IQueryable query), но я получаю результат, который мне не совсем нужен — SelectSome. Я хотел бы получить результат в формате JSON или привести к продукту

Код: Выделить всё

[HttpGet("get")]
[EnableQuery]
public async Task Get(ODataQueryOptions
 queryOptions, CancellationToken cancellationToken)
{
var resultQuery = (IQueryable) queryOptions.ApplyTo(dbContext.Products.AsQueryable());
var result = await resultQuery.ToListAsync(cancellationToken: cancellationToken);
//some other actions
return Ok(result);
}
Я также пытаюсь использовать IActionFilter, но безуспешно.

Код: Выделить всё

[Route("odata/Products")]
[Authorize]
public class ProductsOdataController(ApplicationDbContext dbContext) : ODataController
{
[HttpGet("get")]
[EnableQuery]
[OdataResultFilter]
public IActionResult Get()
{
return Ok(dbContext.Products.AsQueryable());
}
}

public class OdataResultFilter : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
}

public void OnActionExecuted(ActionExecutedContext context)
{
var json = JsonConvert.SerializeObject(objectResult.Value);

objectResult.Value = json;
}
}
Когда я использую JsonConvert.SerializeObject(objectResult.Value), я получаю данные от продукта, но без параметров OData.
Я есть еще один вариант использования .Cast()

Код: Выделить всё

[HttpGet("get")]
[EnableQuery]
public async Task Get(ODataQueryOptions queryOptions, CancellationToken cancellationToken)
{
var resultQuery = queryOptions.ApplyTo(dbContext.CrmContractors.AsQueryable()).Cast();
var result = await resultQuery.Select(wrapper => wrapper.ToDictionary()).ToListAsync(cancellationToken);

//some other actions
return Ok(result);
}
Я получаю List и могу с ним работать, но если я использую $expand вот так

Код: Выделить всё

https://localhost/odata/Products?$expand=Orders
Я получу одну из KeyValuePair вот так

Код: Выделить всё

KeyValuePair() {
Key = "Orders",
Value = List...
}
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-in-net-8
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Когда OData применяет ODataQueryOptions в .NET 8?
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • .NET Core OData – $expand не работает с ODataQueryOptions в серверной части
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Издевательство или прагматичное создание модульного теста ODataQueryOptions для .NET 5 Core Controller
    Гость » » в форуме C#
    0 Ответы
    47 Просмотры
    Последнее сообщение Гость
  • Модульное тестирование OData в .NET Core 6.0
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Использование OData в веб-API .NET Core для MongoDB
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»