Return 来自 ODataController 的 CreatedAtRoute 位置
Return CreatedAtRoute location from ODataController
我有一个带有 Post 方法的 ODataController,它应该 return 一个 URL 到一个新创建的 OData 资源,如下所示:
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)
{
...
}
}
在我的例子中,当 returning CreatedAtRoute 时,我得到 "InvalidOperationException: No route matches the supplied values"。我可以通过将代码更改为:
来解决此问题
return Created($"{baseUri}/odata/Task({id})", new object());
有什么方法可以改用 CreatedAtRoute 并使其 return 正确的 OData 路径?
您在 Created 方法中返回的路线:"{baseUri}/odata/Task({id})"
不存在。最简单的解决方法是更改 URL 以匹配您的控制器方法。
变化:$"{baseUri}/odata/Task({id})"
匹配$"{baseUri}/odata/GetTask({id})"
我也有这个问题。我能够通过将 "odataPath" 添加到 routeValues
:
来让它工作
return CreatedAtAction(nameof(Get), new { id, odataPath = $"{baseUri}/odata/Task({id})" }, new object());
更新:
我确实找到了 alternate/better 方法。从 ODataController
继承时,您可以访问两个额外的结果类型:CreatedODataResult<TEntity>
和 UpdatedODataResult<TEntity>
。所以这有效:
return Created(new object());
returns 201 与 OData-specific 在位置 header 创建路线。
我有一个带有 Post 方法的 ODataController,它应该 return 一个 URL 到一个新创建的 OData 资源,如下所示:
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)
{
...
}
}
在我的例子中,当 returning CreatedAtRoute 时,我得到 "InvalidOperationException: No route matches the supplied values"。我可以通过将代码更改为:
来解决此问题return Created($"{baseUri}/odata/Task({id})", new object());
有什么方法可以改用 CreatedAtRoute 并使其 return 正确的 OData 路径?
您在 Created 方法中返回的路线:"{baseUri}/odata/Task({id})"
不存在。最简单的解决方法是更改 URL 以匹配您的控制器方法。
变化:$"{baseUri}/odata/Task({id})"
匹配$"{baseUri}/odata/GetTask({id})"
我也有这个问题。我能够通过将 "odataPath" 添加到 routeValues
:
return CreatedAtAction(nameof(Get), new { id, odataPath = $"{baseUri}/odata/Task({id})" }, new object());
更新:
我确实找到了 alternate/better 方法。从 ODataController
继承时,您可以访问两个额外的结果类型:CreatedODataResult<TEntity>
和 UpdatedODataResult<TEntity>
。所以这有效:
return Created(new object());
returns 201 与 OData-specific 在位置 header 创建路线。