2
respostas

erro no orderby

fiz a instalação do System.Linq.Dynamic.Core usando o gerenciador de pacotes NuGet.

porém quando o orderby não está sendo usado ele fica nulo e dá um erro mesmo sem usar o filtro.

Classe LivroOrdemExtensions

using Alura.ListaLeitura.Modelos;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq.Dynamic.Core;
using System.Linq;

namespace Alura.WebApi.Api.Modelos
{
    public static class LivroOrdemExtensions
    {
        public static IQueryable<Livro> AplicaOrdem(this IQueryable<Livro> query, LivroOrdem ordem)
        {
            if (ordem != null)
            {
                query = query.OrderBy(ordem.OrdenarPor);                
            }
            return query;
        }
    }

    public class LivroOrdem
    {
        public string OrdenarPor { get; set; }
    }
}

erro é o n unhandled exception occurred while processing the request.

ArgumentNullException: Value cannot be null. Parameter name: ordering System.Linq.Dynamic.Core.Validation.Check.NotEmpty(string value, string parameterName) in Check.cs, line 93

Classe Livros2Controller

[HttpGet]
        public IActionResult ListaDeLivros(
            [FromQuery] LivroFiltro filtro,
            [FromQuery] LivroOrdem ordem,
            [FromQuery] LivrosPaginacao paginacao)
        {
            var model = _repo.All
                .AplicaFiltro(filtro)
                .AplicaOrdem(ordem)
                .Select(l => l.ToApi())
                .ToList();
            return Ok(model);
        }
2 respostas

Oi Diego, tudo bem?

O problema é que este parâmetro está vindo nulo:

[FromQuery] LivroOrdem ordem

Note que o método ListaDeLivros espera um parâmetro LivroOrdem a partir da querystring, mas por algum motivo o binding não está feito, por isso o objeto LivroOrdem não está sendo criado.

Você pode postar aqui a URL completa da chamada para a action ListaDeLivros, incluindo a querystring?

Por exemplo eu testei essa url no postman. URL=http://localhost:6000/api/v2.0/Livros

E o erro já acontece . ArgumentNullException: Value cannot be null. Parameter name: ordering.

já na minha api v1 o erro não acontece por que não tem esse orderby então postman retorna a lista de livros.

Não entendi por que ele fica nulo se ele não está sendo usado nesse momento.