Mapeando rutas dinámicas de OData con ASP.NET Core OData 8.0
Tengo una aplicación en la que los tipos de datos EDM se generan durante la ejecución de la aplicación (incluso pueden cambiar durante la ejecución). Basado vagamente en OData DynamicEDMModelCreation Sample, reestructurado para usar el nuevo enrutamiento de puntos finales. Allí, el modelo EDM se genera dinámicamente en tiempo de ejecución y todas las solicitudes se envían al mismo controlador.
Ahora quería actualizar a la versión más nueva de ASP.NET Core OData 8.0 y todo el enrutamiento cambió, por lo que la solución actual ya no funciona.
He leído los dos blogs de la actualización: Blog1 y Blog2, y parece que ya no puedo usar la solución “antigua”, ya que la función MapODataRoute() dentro de los puntos finales ya no está. También parece que ninguna de las convenciones de enrutamiento integradas funciona para mi caso de uso, ya que todas requieren que el modelo EDM esté presente en tiempo de depuración.
Quizás pueda usar una convención personalizada IODataControllerActionConvention. Intenté activar la convención agregándola a la Convención de enrutamiento, pero parece que todavía me falta una pieza sobre cómo activarla.
services.TryAddEnumerable(
ServiceDescriptor.Transient<IODataControllerActionConvention, MyEntitySetRoutingConvention>());
¿Este enfoque incluso funciona? ¿Es posible activar un modelo dinámico en la nueva versión previa de OData 8.0? ¿O alguien tiene alguna idea sobre cómo abordar el enrutamiento dinámico para el nuevo OData 8.0?
davy.ai
Solución para la Creación de un Modelo EDM Dinámico en ASP.NET Core OData 8.0
Con el nuevo lanzamiento de ASP.NET Core OData 8.0, ha habido cambios en la configuración del enrutamiento que han dificultado la implementación de la creación dinámica de modelos EDM durante el tiempo de ejecución. Sin embargo, hay una posible solución para este problema.
Un enfoque es utilizar una convención personalizada
IODataControllerActionConvention
para activar la creación de modelos dinámicos durante el tiempo de ejecución. Esta convención se puede agregar a la convención de enrutamiento utilizando el métodoTryAddEnumerable
en el métodoConfigureServices
del archivoStartup.cs
.MyEntitySetRoutingConvention
es una implementación personalizada deIODataControllerActionConvention
. Esta convención es responsable de crear dinámicamente el modelo EDM durante el tiempo de ejecución y agregarlo a la configuración de enrutamiento de OData.En el método
Apply
de la convención personalizada, se crea un modelo EDM dinámico, se agregan entidades, conjuntos de entidades y propiedades al modelo EDM, y luego se agrega el modelo EDM dinámico a la configuración de enrutamiento de OData utilizando el métodoMapODataRoute
. Además, los controladores de OData se registran utilizando una implementación personalizada deODataControllerActionExecutor
.Este enfoque debería permitir la creación dinámica de modelos EDM durante el tiempo de ejecución en el nuevo ASP.NET Core OData 8.0.</iodatacontrolleractionconvention,>