angular - WebAPI POST 中的 ViewModel 参数始终为默认值
问题描述
我无法让我的客户发送数据并且我的控制器接受带有发送值的数据。
在客户端中,我可以 console.log 这些值,它们会按预期显示。我的 PUT(编辑项)控制器使用几乎相同的逻辑(除了不传递 ID)运行得非常好。我已经尝试了几乎所有我能想到的尝试让 POST 显示我传递给它的数据,但无济于事。我错过了一些关键步骤吗?我已经搜索了堆栈溢出,人们似乎也有类似的问题,但到目前为止,没有一个解决方案对我有用。
[Route("add")]
public void Post(ItemsViewModel model)
{
var item = new Item()
{
Name = model.Name,
Classification = model.Classification,
DatabaseLink = model.DatabaseLink,
IsBis = model.IsBis,
ItemType = model.ItemType,
Phase = model.Phase,
PrimaryPrice = model.PrimaryPrice,
Priority = model.Priority,
Slot = model.Slot,
Source = model.Source
};
if (item != null)
{
_unitOfWork.Items.Add(item);
_unitOfWork.SaveChanges();
}
}
而对于客户...
console.log(this.addItemForm.getRawValue());
this.http.post(`api/items/add`, this.addItemForm.getRawValue()).subscribe(res => {
控制台读取...
id: 0
phase: 1
name: "dasdad"
classification: "dsadad"
source: "qdsadasd"
slot: "dasdasd"
itemType: "sdasdsa"
isBis: true
primaryPrice: "1.112"
priority: "sadasdada"
databaseLink: 12345
我的编辑项目控制器(PUT)工作得很好,但添加一个却不行。
this.http.put(`api/items/update/${this.editItemForm.getRawValue().id}`, this.editItemForm.getRawValue()).subscribe(res => {
[Route("update/{id}")]
public void Put(int id, [FromBody]ItemsViewModel model)
{
var item = _unitOfWork.Items.Get(id);
if (item != null)
{
item.Name = model.Name;
item.Classification = model.Classification;
item.DatabaseLink = model.DatabaseLink;
item.IsBis = model.IsBis;
item.ItemType = model.ItemType;
item.Phase = model.Phase;
item.PrimaryPrice = model.PrimaryPrice;
item.Priority = model.Priority;
item.Slot = model.Slot;
item.Source = model.Source;
_unitOfWork.Items.Update(item);
_unitOfWork.SaveChanges();
}
}
如果有人可以帮助诊断,那就太好了,现在已经坚持了好几天了。
我已经尝试过几件事......使用 [FromBody] 变成 JSON 对象,在模型中添加一个 ctor,即视图模型。在客户端中创建一个 Item 对象并以这种方式将 Web 客户端传递给控制器,等等......它总是在断点处到达控制器,但无论我尝试什么参数中的模型,那里的所有数据都是空或默认 0。
解决方案
private httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
this.http.post(`api/items/add`, this.addItemForm.getRawValue(), httpOptions)
查看 netcore 3 中 Post 的 WebApi文档,可能值得尝试将[HttpPost]
属性添加到控制器。
如果您仍然遇到问题,请确保您的 ViewModel 类型匹配 / 可以从您通过 Angularhttp.post
调用传递的对象转换。
推荐阅读
- c - 复制字符的指针问题
- css - Bootstrap 4 Div 排序问题
- c# - 将 XML 发布到 MVC 控制器 C#
- python - 为什么 numpy 比我的 c/c++ 代码对浮点数组求和更快?
- python - python:在数组中找到两个乘以20的元素
- css - TYPO3 - 修改介绍包 CSS?
- javascript - 更新到Vue 2.2.0,不确定vue-template-compiler和vue-loader哪个版本匹配
- vba - vba-拆分字典值
- loops - iframe 仅在加载一页后将 src 设置为循环
- c# - 在按钮上添加新按钮单击 C# winform