首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ODataController返回CreatedAtRoute位置

从ODataController返回CreatedAtRoute位置
EN

Stack Overflow用户
提问于 2019-01-16 17:57:29
回答 2查看 391关注 0票数 1

我有一个带有Post方法的ODataController,它应该返回一个指向新创建的OData资源的URL,如下所示:

代码语言:javascript
复制
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:没有与提供的值匹配的路由“。我可以通过将代码更改为:

代码语言:javascript
复制
return Created($"{baseUri}/odata/Task({id})", new object());

有没有办法改为使用CreatedAtRoute并使其返回正确的OData路径?

EN

回答 2

Stack Overflow用户

发布于 2020-01-21 19:10:31

我也有这个问题。我可以通过在routeValues中添加"odataPath“来让它工作。

代码语言:javascript
复制
return CreatedAtAction(nameof(Get), new { id, odataPath = $"{baseUri}/odata/Task({id})" }, new object());

更新:

我确实找到了一种替代/更好的方法。从ODataController继承时,您可以访问两个额外的结果类型:CreatedODataResult<TEntity>UpdatedODataResult<TEntity>。所以这是可行的:

代码语言:javascript
复制
return Created(new object());

这将返回一个201,在location标头中包含特定于OData的创建路由。

票数 1
EN

Stack Overflow用户

发布于 2019-09-27 08:17:29

您在创建的方法中返回的路由:"{baseUri}/odata/Task({id})"不存在。最简单的解决方法是更改您的URL以匹配您的控制器方法。

更改:$"{baseUri}/odata/Task({id})"

匹配$"{baseUri}/odata/GetTask({id})"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54214474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档