Lea manualmente ODataQueryOptions desde HttpContext.
Quizás alguien pueda ayudarme. Actualmente uso NSwag (https://github.com/RicoSuter/NSwag) para la especificación de la API y la generación de código de cliente para mi API. Y debido a esto, no puedo usar el tipo ODataQueryOptions en mis métodos de controlador sin muchas desventajas.
Actualmente he creado una solución basada en expresiones para admitir una llamada agradable desde el cliente completamente basada en la cadena de filtro Odata.
Entonces, actualmente el cliente puede usar la API generada y hacer una llamada como esta
La solicitud en este ejemplo es entonces una llamada http como esta /api/v1/Brands/?$filter=Name eq ‘Samsung’
Y en el lado del servidor, actualmente creo una expresión real a partir de ella y la filtro en la base de datos y esto funciona bien. Y debido a que todo el controlador tiene [EnableQuery], todos los demás parámetros de Odata como $select, $orderby y así sucesivamente se ejecutan en la memoria en IEnumerable<> y esto es algo que quiero cambiar porque tengo algunos resultados envueltos para paginar, por ejemplo y también no me gusta la mezcla de esto.
Y si creo el método del controlador así
entonces el parámetro ODataQueryOptions
Ahora estoy buscando una forma de hacer lo que sea que el enlazador de modelo OData esté haciendo para acceder directamente a ODataQueryOptions
Larga historia corta. Espero que alguien entienda mi problema y pueda ayudarme o darme una buena idea.
Supongo que debería ser de alguna manera posible hacer algo como esto, pero no sé cómo.
public static ODataQueryOptions
{
// No lo sé
}
davy.ai
Uso de ODataQueryOptions en métodos de controlador de ASP.NET Core
El problema descrito por el experto en TI es que no pueden usar el tipo
ODataQueryOptions
en sus métodos de controlador sin encontrar muchas desventajas, debido a su uso de NSwag para la especificación de API y la generación de código de cliente.Han creado una solución usando expresiones para admitir una llamada agradable desde el cliente basada en la cadena de filtro de OData, que funciona bien. Sin embargo, debido a que todo el controlador tiene
[EnableQuery]
, todos los demás parámetros de OData como$ select
,$ orderby
, etc. se ejecutan en memoria enIEnumerable <>
, lo que no es ideal.Para resolver este problema, desean acceder a
ODataQueryOptions<branddto>
directamente desdeHttpContext
oRequest
, pero no saben cómo hacerlo.Una posible solución es crear un método de extensión para
HttpRequest
que lea las opciones de consulta de OData y las devuelva como una instancia deODataQueryOptions<t>
. Aquí hay un ejemplo de implementación:“`C# ReadODataQueryOptions (this HttpRequest request) (new ODataQueryContext(ODataModelBuilder.GetEdmModel(), typeof (T)), request.Query);
public static ODataQueryOptions
{
var odataOptions = new ODataQueryOptions
return odataOptions;
}
En este ejemplo, se llama al método
ReadODataQueryOptions
en el objetoSolicitud
para obtener las opciones de consulta de OData. Luego se pasan estas opciones al constructor deGetAllBrandsQuery
para filtrar los resultados en función de la cadena de consulta de OData.Este enfoque permite al experto en TI usar
ODataQueryOptions
en sus métodos de controlador sin tener que lidiar con las desventajas de NSwag y[EnableQuery]
, y sin necesidad de hacer referencia al paquete OData en el proyecto de cliente.