NancyFX Post - 使用列表参数绑定到对象

时间:2014-04-22 17:39:18

标签: nancy

我正在使用Nancy,我已经创建了一个带有List属性的基本模型。当我使用下面的GET方法时,我得到了预期的JSON输出。但是,当我尝试POST回相同的JSON时,我最终得到一个带有空字符串列表的对象。我创建了两个属性,只是为了验证我的问题不是因为将DataPoints参数实例化为构造函数中的新List。有没有人知道为什么这不能正常回归?

从初始获取返回的JSON对象

{
   "dataPoints": [
      "0",
      "1",
      "2",
      "3",
      "4"
   ],
   "dataPoints2": [
      "0",
      "1",
      "2",
      "3",
      "4"
   ]
}

从帖子返回的JSON对象:

{
   "dataPoints": [],
   "dataPoints2": []
}

类别:

public class BasicModel
{
  private List<string> _dataPoints;
  public List<string> DataPoints
  {
    get
    {
      if (_dataPoints == null)
        {
          _dataPoints = new List<string>();
        }
        return _dataPoints;
    }
    set
    {
      _dataPoints = value;
    }
  }

  public List<string> DataPoints2 { get; set; }

  public BasicModel()
  {
    DataPoints2 = new List<string>();
  }

  public BasicModel(int idx)
  {
    DataPoints2 = new List<string>();
    for (int i = 0; i < idx; i++)
    {
      DataPoints.Add(i.ToString());
      DataPoints2.Add(i.ToString());
    }
  }
}

获取方法:

Get["/basicModel/{idx}"] = parameters =>
{
    int idx = Convert.ToInt32(parameters["idx"].ToString());
    BasicModel m = new BasicModel(idx);

    return Negotiate
        .WithStatusCode(HttpStatusCode.OK)
        .WithModel(m)
        .WithView("default");
};

发布方法:

Post["/basicmodel"] = parameters =>
{
    BasicModel m = new BasicModel();
    this.BindTo(m);

    return Negotiate
        .WithStatusCode(HttpStatusCode.OK)
        .WithModel(m)
        .WithView("default");
};

1 个答案:

答案 0 :(得分:0)

您可能会遇到know issueBindTo创建一个新实例,即使您提供了一个。

您应该能够使用Bind而不是BindTo,并且绑定返回一个新对象:

Post["/basicmodel"] = parameters =>
{
   BasicModel m = this.Bind();

   return Negotiate
      .WithStatusCode(HttpStatusCode.OK)
      .WithModel(m)
      .WithView("default");
};