【问题标题】:How to Add Uri to the Created(Status Code 201) of a Post Request如何将 Uri 添加到 Post 请求的 Created(状态代码 201)
【发布时间】:2020-01-09 01:19:23
【问题描述】:

我刚开始学习 asp.net core api,我正在尝试从 Postman 发出 post 请求。我想在发布时返回状态码 201,并将新发布的数据的 Uri 作为位置返回。下面是我的控制器代码

    [HttpPost]
    public ActionResult CreateMake([FromBody]MakeResource makeresource)
    {
        if (!ModelState.IsValid) {
            return BadRequest(ModelState) ;
        }
       var makes = mapper.Map<MakeResource, Make>(makeresource);
        _makes.AddMake(makes);
        makeresource.Id = makes.Id;

        return Created(new Uri(Request.Path, UriKind.Relative), makeresource);
    }

我收到一个错误

System.UriFormatException: '无效的 URI: URI 的格式可能 未定。'

我猜它与 Uri(Request.Path) 有关。 在 Asp.net web api 中,我将其实现为return Created(new Uri(Request.Uri + "/" + makes.Id), makeresource);,并且操作类型将是 IHttpActionResult 而不是 ActionResult,如我的控制器中所示,但它在 asp.net 核心中不起作用。 将需要有关如何解决此问题的任何帮助。 谢谢。

【问题讨论】:

  • 你有没有使用调试器查看你有哪些值用于创建 Uri
  • URI 是空的,这就是它抛出错误的原因...

标签: c# asp.net-core asp.net-apicontroller


【解决方案1】:

我只是想把它放在这里,以防将来有人需要它。 我从What is the ASP.NET Core MVC equivalent to Request.RequestURI?得到了我使用的答案

我通过将(Request.Path, UriKind.Relative) 替换为(Request.GetEncodedUrl()+ "/" + makes.Id) 解决了我的问题,如下所示:

return Created(new Uri(Request.GetEncodedUrl()+ "/" + makes.Id), makeresource);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多