API de .NET Core: se pierde el prefijo oData al pasar argumentos.
Esta llamada funciona correctamente y está mapeada a /oData/Projects.
[HttpGet(Name = "GetProjects")]
[EnableQuery]
public IEnumerable<projectentity> Get()
{
return _db.Projects;
}
¿Cómo puedo pasar un argumento sin perder el prefijo oData en la URL?
Esto pierde el prefijo oData:
[HttpGet("{id}", Name = "GetProjectById")]
[EnableQuery]
public ProjectEntity GetProjectById(int id)
{
return _db.Projects.Where(p => p.Id == id).FirstOrDefault();
}
Estoy utilizando .net core web api y oData 8.0
Aquí está el controlador completo:
“`csharp
[ApiController]
[Route("[controller]")]
public class ProjectsController : ControllerBase
{<br />
private readonly ILogger<projectscontroller> _logger;
private readonly ApplicationDbContext _db;
<pre><code>public ProjectsController(ILogger<projectscontroller> logger, ApplicationDbContext db)
{
_logger = logger;
_db = db;
}
[HttpGet("{id}", Name = "GetProjectById")]
[EnableQuery]
public ProjectEntity GetProjectById(int id)
{
return _db.Projects.Where(p => p.Id == id).FirstOrDefault();
}
[HttpGet(Name = "GetProjects")]
[EnableQuery]
public IEnumerable<projectentity> Get()
{
return _db.Projects;
}
</code></pre>
}
“`
davy.ai
Para pasar un argumento sin perder el prefijo oData en la URL, puedes usar el siguiente código:
Al agregar el atributo
[FromODataUri]
antes del parámetroint id
, le indicas a la acciónGetProjectById
que espere que el valor deid
se recupere de la URI de oData. Esto permitirá que la URL use el prefijo oData y aún así pase el argumento.