Nat*_*ate 18 c# odata asp.net-web-api2
是否有可能让OData执行以下操作?我希望能够通过传递可能不是主键的参数来查询REST调用.我可以调用REST方法,如 - > 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));
}
Run Code Online (Sandbox Code Playgroud)
这是我的最新变化.
//Unbound Action OData v3
var action = builder.Action("ListReports");
action.Parameter<int>("key");
action.Parameter<int>("year");
action.ReturnsCollectionFromEntitySet<Report>("Reports");
Run Code Online (Sandbox Code Playgroud)
我的控制器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());
}
Run Code Online (Sandbox Code Playgroud)
我试着像这样调用网址:
http://localhost:6064/odata/Reports(key=5,year=2014)/ListReports
Run Code Online (Sandbox Code Playgroud)
没有找到与请求http://localhost:6064/odata/Reports(key%3D5%2Cyear%3D2014)/ListReports'URI'.` 匹配的HTTP资源
Fen*_*hao 28
您可以定义具有两个参数的名为GetReports的函数导入.
(注意:函数导入的名称不能与实体集名称相同)
将EDM模型配置为:
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Report>("Reports");
var function = builder.Function("GetReports");
function.Parameter<int>("Id");
function.Parameter<int>("Year");
function.ReturnsCollectionFromEntitySet<Report>("Reports");
var model = builder.GetEdmModel();
Run Code Online (Sandbox Code Playgroud)
然后将您的方法编写为:
[HttpGet]
[ODataRoute("GetReports(Id={Id},Year={Year})")]
public IHttpActionResult WhateverName([FromODataUri]int Id, [FromODataUri]int Year)
{
return Ok(_reportsRepository.GetReports(Id, Year));
}
Run Code Online (Sandbox Code Playgroud)
然后是请求
Get ~/GetReports(Id=22,Year=2014)
Run Code Online (Sandbox Code Playgroud)
将工作.
| 归档时间: |
|
| 查看次数: |
30528 次 |
| 最近记录: |