【发布时间】:2016-08-16 09:55:53
【问题描述】:
我有一个非常简单的 OData 控制器,可以成功处理标准操作(至少 GET、POST、PUT 和 DELETE 方法有效)。我关注了this tutorial 并添加了简单的绑定操作。该方法有参数参数,但实际上它不需要参数:
[HttpPost]
public IHttpActionResult Close([FromODataUri] int key, ODataActionParameters parameters) {
return Ok();
}
我在 OData EDM 配置中定义了这个动作如下:
builder.EntitySet<Ticket>("tickets");
builder.EntityType<Ticket>().Action("Close");
我正在尝试向邮递员发起行动:
POST /odata/tickets(2)/Default.Close HTTP/1.1
Host: localhost:50477
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: eef4c1f6-8c7f-f5eb-c22d-4397f3bda170
但是收到错误信息:
{
"error": {
"code": "",
"message": "No HTTP resource was found that matches the request URI 'http://localhost:50477/odata/tickets(2)/default.close'.",
"innererror": {
"message": "No routing convention was found to select an action for the OData path with template '~/entityset/key/unresolved'.",
"type": "",
"stacktrace": ""
}
}
}
我已阅读整个互联网和所有关于 SO 的相关文章,但无法解决此问题。请帮助我,因为我没有任何新的想法如何解决这个问题。
【问题讨论】:
-
你的 WebAPI/OData 版本是什么,你能分享你的元数据吗,我仍然无法重现你的问题。
-
OData v4,WebApi 2.2。请查看元数据:pastebin.com/MuPzFPxe
-
您发送给控制器的 JSON 是什么?
-
我找到了错误的原因 - 不正确的重写规则。当我禁用所有重写规则时,所有测试都通过了。
标签: asp.net-web-api odata