gpt4 book ai didi

c# - Web API 和 OData - 传递多个参数

转载 作者:可可西里 更新时间:2023-11-01 02:59:06 28 4
gpt4 key购买 nike

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

[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<int>("key");
action.Parameter<int>("year");
action.ReturnsCollectionFromEntitySet<Report>("Reports");

我的 Controller 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<Report>("Reports");
var function = builder.Function("GetReports");
function.Parameter<int>("Id");
function.Parameter<int>("Year");
function.ReturnsCollectionFromEntitySet<Report>("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 - 传递多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616108/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com