首页 > 解决方案 > 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。

更新的网络选项卡视图 在此处输入图像描述

标签: angularasp.net-coreasp.net-web-api

解决方案


要让您的帖子正常工作,请尝试设置您的 http标头

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调用传递的对象转换。


推荐阅读