【发布时间】:2019-09-08 00:25:15
【问题描述】:
在此处使用 Angular 6 和 C#。
在我的表单的按钮单击事件中,我想保存数据。该事件调用一个保存数据的 API。
下面是我的按钮点击事件:
submitData() {
//After getting form values I create an object as below
let myData =
{
"name":name,
"date": date,
"status": status,
"selection":selection,
"createdBy": createdBy
};
this.myService.save(myData)
.subscribe(
(jsonData) => {
//redirect etc after save
});
}
在我的上述事件中,选择本身包含对象数组:
0: {name: "u1", id: "123", type:"dev", comment: "comment1"}
1: {name: "u2", id: "456", type:"prd", comment: "comment2"}
以下是我的服务电话:
saveExtract(data) {
return this.httpClient.post<any>(this.url + '/Save', data)
.pipe(
catchError())
);
}
最后下面是我的c# api;
[HttpPost("Save", Name = "Save")]
public async Task Save([FromBody] SaveModel data)
{
//do save here etc
}
但上面的代码返回 400 (Bad Request) 错误。
我什至尝试将断点放在我的 api 中,但它从未命中。
所以当我打电话给我的帖子时似乎有问题。
谁能指出问题?
谢谢
---更新---
所以我错过了传递 httpOptions 和使用 Json.stringify 的代码。通过后部分工作如下:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
saveExtract(data) {
return this.httpClient.post<any>(this.url + '/Save', data, httpOptions)
.pipe(
catchError())
);
this.myService.save(JSON.stringify(myData))
.subscribe(
(jsonData) => {
//redirect etc after save
});
当我注释掉选择数组时,上面的代码有效,该数组是我要传递给 API 的数据的一部分。但是当我传递选择数组时不起作用并给出错误的请求错误。
那么任何人都可以指出我如何将对象数组传递给它。
【问题讨论】:
-
SaveModel上是否有任何服务器端模型验证?您的Save操作或全局操作过滤器上是否有任何服务器端操作过滤器? -
@Igor 我已经更新了我上面的帖子,请看一下
-
SaveModel的定义是什么?与我们分享完整的控制器代码。
标签: angular asp.net-web-api asp.net-core-webapi