ASP.NET web api中的OData V3操作不';我拿不到扳机
我正在使用asp.net和webapi 2.2的OData V3端点。我用它成功地实施了CRUD操作。现在,我想添加一些自定义操作以及CRUD操作。我跟随文章()使用ODatav3和WebAPI创建了操作 我打字的时候 URI: 它抛出以下错误:ASP.NET web api中的OData V3操作不';我拿不到扳机,odata,asp.net-web-api-odata,Odata,Asp.net Web Api Odata,我正在使用asp.net和webapi 2.2的OData V3端点。我用它成功地实施了CRUD操作。现在,我想添加一些自定义操作以及CRUD操作。我跟随文章()使用ODatav3和WebAPI创建了操作 我打字的时候 URI: 它抛出以下错误: <m:error><m:code/><m:message xml:lang="en-US">No HTTP resource was found that matches the request URI 'http:
<m:error><m:code/><m:message xml:lang="en-US">No HTTP resource was found that matches the request URI 'http://localhost:55351/odata/Courses(1101)/AlterCredits'.</m:message><m:innererror><m:message>No routing convention was found to select an action for the OData path with template '~/entityset/key/unresolved'.</m:message><m:type/><m:stacktrace/></m:innererror></m:error>
我在网上做过研究,发现了这个链接。但这是为OData V4准备的。我正在使用ODataV3和Action
谢谢,首先,您的操作
AlterCredits
定义为:
ActionConfiguration atlerCredits = modelBuilder.Entity<Course>().Collection.Action("AlterCredits");
public async Task<IHttpActionResult> AlterCredits([FromODataUri] int key, ODataActionParameters parameters)
{
...
}
这意味着AlterCredits
收听对课程
实体的调用
因此,您得到了未找到HTTP资源错误消息
根据您的示例代码,我创建了一个示例方法供您参考:
[HttpPost]
public async Task<IHttpActionResult> AlterCredits(ODataActionParameters parameters)
{
if (!ModelState.IsValid)
return BadRequest();
object value;
if (parameters.TryGetValue("Credit", out value))
{
int credits = (int)value;
credits = credits + 3;
return Ok(credits);
}
return NotFound();
}
您可以得到如下响应:
{
"d":{
"AlterCredits":12
}
}
关于您的问题:
ActionConfiguration atlerCredits = modelBuilder.Entity<Course>().Collection.Action("AlterCredits");
public async Task<IHttpActionResult> AlterCredits([FromODataUri] int key, ODataActionParameters parameters)
{
...
}
[HttpPost]
public async Task<IHttpActionResult> AlterCredits(ODataActionParameters parameters)
{
if (!ModelState.IsValid)
return BadRequest();
object value;
if (parameters.TryGetValue("Credit", out value))
{
int credits = (int)value;
credits = credits + 3;
return Ok(credits);
}
return NotFound();
}
POST ~/odata/Courses/AlterCredits
Content-Type: application/json;odata=verbose
Content: {"Credit":9}
{
"d":{
"AlterCredits":12
}
}