Csharp/C#教程:Web API和OData-传递多个参数分享


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:

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

未找到与请求URI“ https://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) 

将工作。

上述就是C#学习教程:Web API和OData-传递多个参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1010965.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐