我有一个带有Post方法的ODataController,它应该返回一个指向新创建的OData资源的URL,如下所示:
public class TasksController: ODataController
{
[HttpPost]
public IActionResult Post([FromBody] Request request)
{
...
return CreatedAtRoute("GetTask", new Dictionary<string, object>{{"id", id}}, new object());
}
[ODataRoute(RouteName = "GetTask")]
public IActionResult Get(int key)
{
...
}
}在我的例子中,当返回CreatedAtRoute时,我得到"InvalidOperationException:没有与提供的值匹配的路由“。我可以通过将代码更改为:
return Created($"{baseUri}/odata/Task({id})", new object());有没有办法改为使用CreatedAtRoute并使其返回正确的OData路径?
发布于 2020-01-21 19:10:31
我也有这个问题。我可以通过在routeValues中添加"odataPath“来让它工作。
return CreatedAtAction(nameof(Get), new { id, odataPath = $"{baseUri}/odata/Task({id})" }, new object());更新:
我确实找到了一种替代/更好的方法。从ODataController继承时,您可以访问两个额外的结果类型:CreatedODataResult<TEntity>和UpdatedODataResult<TEntity>。所以这是可行的:
return Created(new object());这将返回一个201,在location标头中包含特定于OData的创建路由。
发布于 2019-09-27 08:17:29
您在创建的方法中返回的路由:"{baseUri}/odata/Task({id})"不存在。最简单的解决方法是更改您的URL以匹配您的控制器方法。
更改:$"{baseUri}/odata/Task({id})"
匹配$"{baseUri}/odata/GetTask({id})"
https://stackoverflow.com/questions/54214474
复制相似问题