【问题标题】:Http failure response for http://localhost:5000/api/users/siteUsers/[object%20Object],[object%20Object],[object%20Object]: 400 Bad Requesthttp://localhost:5000/api/users/siteUsers/[object%20Object],[object%20Object],[object%20Object] 的 Http 失败响应:400 Bad Request
【发布时间】:2021-06-22 05:23:47
【问题描述】:

我正在尝试在 angular 11 和 .netcore 3.1 web api 中添加多选下拉菜单。 当我提交下拉列表时,会发生这样的错误。 "http://localhost:5000/api/users/siteUsers/[object%20Object],[object%20Object],[object%20Object] 的 Http 失败响应:400 Bad Request"

后端

[Route("siteUsers/{id}")]

如何从前端传递数据。

编辑:

Angular service.ts 文件

  CreateSiteUsersAsync(data: FormData, id: number) {
    return this.http.post(`${this.baseUrl}/${this.basePath}/siteUsers/${id}`, data);
  }

.ts 文件

async onSubmitHandler() {
    const data = { ...this.userForm.value};

    await this.userService.CreateSiteUsersAsync(data,data.siteCode).toPromise();
}

【问题讨论】:

  • 你不能像/[object%20Object],[object%20Object],[object%20Object]一样发送http请求。很可能,问题出在您的客户端代码中。你能分享你的角度代码吗?
  • @BarışCanYılmaz 我已经编辑了帖子。见上文
  • 另外,你能分享你发送帖子请求的后端代码吗?
  • 看起来你的 id 是一个对象数组,而不是一个数字

标签: asp.net-core-webapi asp.net-core-3.1 angular11


【解决方案1】:

你的功能有一些问题。

第一个 Route 被指定,但不是 Http 方法。这意味着默认方法是Get。您不能将表单数据传递给Get 方法。应该是PostPut。所以首先是添加一个http方法:

[Route("siteUsers/{id}")]
[HttpPost]

或者更优雅:

[HttpPost("siteUsers/{id}")]

接下来是您从中获取数据的接收属性。有[FromRoute][FromForm][FromQuery][FromBody]四个选项。

默认情况下,C# 使用[FromQuery]。因此,对于iddata,您都需要指定搜索此数据的位置。见以下代码:

[HttpPost("siteUsers/{id}")]
public IActionResult MyEndpoint([FromRoute] id, [FromForm] data)
{
    ...
    
    return Ok();
}

您也可以使用[FromBody] 代替[FromForm] 标记,因为从技术上讲,两者都来自正文。

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 2021-09-15
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多