Manejar Odata / entityset / key / navigation

Tenemos un proyecto basado en el proyecto DynamicEdmModelCreation de ODataSamples-master odata ejemplos.

Hemos establecido una convención de enrutamiento que maneja todas las solicitudes a este controlador específico:

[HttpGet] [EnableQuery] public EdmEntityObjectCollection Get() { ... } [EnableQuery] public IEdmEntityObject Get(string key) { ... } 

Intentamos por ejemplo

/ odata / hoteles -> OK!

/ odata / Hoteles (1) -> ¡Ok!

/ odata / Hoteles (1) / Habitación -> Respuesta:

No se encontró una convención de enrutamiento para seleccionar una acción para la ruta OData con la plantilla ‘~ / entityset / key / navigation’.

En la depuración vemos que la convención de ruta maneja bien la solicitud y la redirige a nuestro controlador, pero no se ejecuta ningún método. El Convenio de Enrutamiento es:

 public class MatchRoutingConventionService : IODataRoutingConvention { public string SelectAction( ODataPath odataPath, HttpControllerContext controllerContext, ILookup actionMap) { return null; } public string SelectController(ODataPath odataPath, HttpRequestMessage request) { return (odataPath.Segments.FirstOrDefault() is EntitySetPathSegment) ? "HamdleAll" : null; } } 

Creemos que el problema puede estar en WebApi al elegir el método correcto que manejará la solicitud, ya que estamos utilizando la firma genérica IEdmEntityObject Get (clave de cadena) .

En su controlador, solo hay dos métodos llamados Get(), Get(string key) . El resultado es:

  1. /odata/Hotels está bien porque la solicitud puede /odata/Hotels al método Get() por convención.

  2. /odata/Hotels(1) está bien porque la solicitud puede /odata/Hotels(1) a Get(string key) por convención.

Sin embargo , no crea otros métodos para responder a otras solicitudes, como en el ejemplo de solicitud:

/odata/Hotels(1)/Room

Debido a que no hay métodos que respondan a ~/entityset/key/navigation , Web API OData no puede encontrar un método en su controlador, por lo que arroja el mensaje de error anterior.

Mi bash:

Puedes modificarlo para cumplir con tu requerimiento. Espero que te ayude.

Gracias.

Sam