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