【问题标题】:ViewModel Parameter always DEFAULT values in WebAPI POSTWebAPI POST 中的 ViewModel 参数始终为默认值
【发布时间】:2020-05-22 23:20:16
【问题描述】:

我无法让我的客户端发送数据并且我的控制器接受带有发送值的数据。

在客户端中,我可以 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 客户端传递给控制器​​,等等……它总是在断点处到达控制器,但是无论我尝试什么参数中的模型,那里的所有数据都是null 或默认 0。

更新了网络标签视图

【问题讨论】:

    标签: angular asp.net-core asp.net-web-api


    【解决方案1】:

    要让您的 post 正常工作,请尝试设置您的 http headers

    private httpOptions = {
        headers: new HttpHeaders({ 'Content-Type': 'application/json' })
    };
    
    this.http.post(`api/items/add`, this.addItemForm.getRawValue(), httpOptions)
    

    在 netcore 3 中查看 WebApi docs 的帖子,可能值得尝试将 [HttpPost] 属性添加到控制器。

    如果您仍然遇到问题,请确保您的 ViewModel 类型匹配 / 可以从您通过 Angular http.post 调用传递的对象转换。

    【讨论】:

    • 可悲的是这似乎也没有任何作用,我又试了一次,但我以前试过。
    • 您使用的是什么版本的 .Net / WebAPI?
    • 您还可以查看从浏览器的网络选项卡发送的 JSON 数据吗?
    • 我用浏览器上的网络标签的图片更新了帖子。
    • 我正在使用 Asp.Net Core 3.0.. 老实说不完全确定在哪里可以找到 web api 版本,尽管这是我目前使用的启动模板...ebenmonney.com/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多