【问题标题】:Why are some of my values not getting populated by webapi为什么我的一些值没有被 webapi 填充
【发布时间】:2015-05-20 17:36:40
【问题描述】:

我正在开发一个 web-api 控制器。我建立了一个 DTO 来保存一个笔记。

public class NoteContainer
{
    public long? NoteId { get; set; }
    public string Type { get; set; }
    public string NoteText { get; set; }

    public NoteContainer(Note note, string type = null)
    {
        NoteId = note.Id;
        NoteText = note.NoteText;
        Type = type;
    }
}

我的控制器中有一个方法:

    [HttpPost]
    public void EditNote(NoteContainer container)
    {
        //do work here
    }

在从客户端发送 NoteContainer 之前,它具有所有值。当它到达服务器时,类型为空!我不应该使用名为类型的变量吗?为什么我会失去价值?

我使用 Postman 发送这个 json:

{
    "noteId": 10,
    "type": "person",
    "noteText": "loves broccoli",
}

【问题讨论】:

  • 显示您发送的 JSON。我的猜测是它有小写的“类型”而不是“类型”。
  • ModelBinder 出现问题。您是否在表单组件上手动输入name 属性(例如<input type='text' name='propertyName' />
  • 试试这个:{ "NoteId": 10, "Type": "person", "NoteText": "loves broccoli", }
  • 没有看到您用于发送此请求的 javascript,看起来您正在 js 中创建一个具有 3 个属性的对象,并将其发送到 EditNote(...) -- 这可以看不到类型,因为它没有作为单独的参数发送(note.Type 可以工作吗?)。同样,推测,但发布您的客户端代码会有所帮助。
  • js 发送的值与邮递员发送的完全相同。大写也不重要

标签: javascript c# asp.net-web-api


【解决方案1】:

我相信这需要默认构造函数。问题可能是Note 类首先被实例化并被赋予NoteContainer

【讨论】:

  • 添加一个默认构造函数,神奇的是,我所有的值都被设置了。我不认为这正是你所说的。我认为这与NoteContainer的构造函数中的默认参数有关
猜你喜欢
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多