Web Api OdataController PATCH动作

时间:2017-03-10 22:54:26

标签: c# asp.net asp.net-web-api odata

我正在构建CRUD OData(ODataController)控制器。对于此请求

  

PATCH http://localhost/MySite/api/MyData(1)

声明如下的 PATCH 操作有效。该模型具有标记为KeyAttribute

的单个属性
public async Task<IHttpActionResult> Patch(
    [FromODataUri] int key, 
    Delta<MyModel> modelDelta)

这个不起作用(请注意,我将参数id命名为key而不是public async Task<IHttpActionResult> Patch( [FromODataUri] int id, // <--- invalid argument name? Delta<MyModel> modelDelta) )。它返回404 - 找不到资源:

[ODataRoute("({id})")]

我还尝试用patch标记此操作但我得到了这个

  

控制器“MyData”中操作“Patch”上的路径模板'({id})'不是有效的OData路径模板。请求URL中遇到空段。请确保指定了有效的请求网址。

我是否可以灵活地专门命名参数?特别是当我可能有2-3个键/参数时。我希望能够使用 public async Task<IHttpActionResult> Patch( [FromODataUri] int id1, [FromODataUri] int id2, Delta<MyModel> modelDelta) 作为

InputStream is;
if (con.getErrorStream() == null) {
    is = con.getInputStream();
}

1 个答案:

答案 0 :(得分:0)

你的班级是这样声明的:

//Must declare this attribute to relative ODataRoute Works
[ODataRoutePrefix("MyData")]
public class MyDataController : ODataController

...

否则必须声明路线

[ODataRoute("MyData({id})")]
...