2017-08-21 1 views
0

J'essaie d'ajouter des options de requête OData dans un service ASP.NET Web API 2 existant après ce link. Je veux seulement que les options de requête soient disponibles dans les méthodes GET. Je n'ai pas été en mesure de travailler l'option $ select lorsque j'essaie d'obtenir un élément par identifiant. Comment puis-je atteindre cet objectif? Voilà ce que j'ai jusqu'à présent:

public class OrdersController : ApiController 
{ 
    private readonly IOrderService orderService; 

    public OrdersController(IOrderService orderService) 
    { 
     this.orderService = orderService; 
    } 

    [HttpGet] 
    [Route("api/orders/{id}", Name = "GetOrderById")] 
    [ResponseType(typeof(Order))] 
    public IHttpActionResult GetOrder(ODataQueryOptions<Order> opts, [FromUri] int id) 
    { 
      Order order = orderService.GetOrderById(id); 
      if (order == null) 
      { 
       return NotFound(); 
      } 

      if (opts.SelectExpand != null) 
       Request.ODataProperties().SelectExpandClause = opts.SelectExpand.SelectExpandClause; 

      return Ok(order); 
    } 
} 

Quand je le tester (? http://localhost:10240/api/orders/1 $ select = OrderId) Je le résultat suivant:

{ 
    "OrderId": 1, 
    "ExternalId": "S001", 
    "TransactionType": "I", 
    "BusinessAssociateId": 1, 
    "DeliveryDate": "2017-06-30T21:08:50.427", 
    "Priority": 5, 
    "OrderType": "A", 
    "Status": "F", 
    "Information": "Incoming Material", 
    "Device": "1", 
    "BusinessAssociateName": null, 
    "BusinessAssociateStreet": null, 
    "BusinessAssociateCity": null, 
    "OrderDetails": null 
} 
+0

Essayez de changer [HttpGet] en [EnableQuery]. Vous pouvez également essayer et appliquer les options vous-même, opts.SelectExpand.ApplyTo (order); – mumfy

Répondre

0

Comme suggéré @mumfy, je manqué d'appliquer la options La dernière ligne de la méthode GetOrder est restée:

return Ok (opts.ApplyTo (Enumerable.Repeat (order, 1) .AsQueryable()));