Web API和OData-传递多个参数

是否有可能让OData执行以下操作? 我希望能够通过传递参数来查询REST调用,而不是主键。 我可以调用REST方法,如:> GetReports(22, 2014)Reports(22, 2014) GetReports(22, 2014) Reports(22, 2014)

 [HttpGet] [ODataRoute("Reports(Id={Id}, Year={Year})")] public IHttpActionResult GetReports([FromODataUri]int Id, [FromODataUri]int Year) { return Ok(_reportsRepository.GetReports(Id, Year)); } 

这是我最新的变化。

  //Unbound Action OData v3 var action = builder.Action("ListReports"); action.Parameter("key"); action.Parameter("year"); action.ReturnsCollectionFromEntitySet("Reports"); 

我的控制器ReportsController的方法

 [HttpPost] [EnableQuery] public IHttpActionResult ListReports([FromODataUri] int key, ODataActionParameters parameters) { if (!ModelState.IsValid) { throw new HttpResponseException(HttpStatusCode.BadRequest); } int year = (int)parameters["year"]; return Ok(_reportsRepository.GetReports(key, year).Single()); } 

我试着像这样调用url:

  http://localhost:6064/odata/Reports(key=5,year=2014)/ListReports 

未找到与请求URI“ http://localhost:6064/odata/Reports(key%3D5%2Cyear%3D2014)/ListReports'匹配的HTTP资源。

您可以定义具有两个参数的名为GetReports的函数导入。

(注意:函数导入的名称不能与实体集名称相同)

将EDM模型配置为:

  var builder = new ODataConventionModelBuilder(); builder.EntitySet("Reports"); var function = builder.Function("GetReports"); function.Parameter("Id"); function.Parameter("Year"); function.ReturnsCollectionFromEntitySet("Reports"); var model = builder.GetEdmModel(); 

然后将您的方法写为:

  [HttpGet] [ODataRoute("GetReports(Id={Id},Year={Year})")] public IHttpActionResult WhateverName([FromODataUri]int Id, [FromODataUri]int Year) { return Ok(_reportsRepository.GetReports(Id, Year)); } 

然后是请求

 Get ~/GetReports(Id=22,Year=2014) 

将工作。