我有一个 ASP.NET WebForms 应用程序。在其中,我成功地托管了获取各种信息的 Web API 服务。现在我需要 PUT(更新)一个对象。据我了解,我可以发送一个 JSON 字符串,如果它映射到定义的模型/类,则 PUT 方法可以将其作为该模型/类的实例接收。
所以这是我的模型......
[DataContract]
[Table("ServiceFeatures")]
public class ServiceFeature
{
[Key]
[DataMember]
public Int64 Id { get; set; }
[DataMember]
public Int64 ServiceId { get; set; }
[DataMember]
[DataType(DataType.Text)]
public String Name { get; set; }
[DataMember]
[DataType(DataType.MultilineText)]
public String Description { get; set; }
[DataMember]
[DataType(DataType.MultilineText)]
public String Comments { get; set; }
[DataMember]
[DataType(DataType.DateTime)]
public DateTime DateAdded { get; set; }
[DataMember]
[DataType(DataType.DateTime)]
public DateTime DateUpdated { get; set; }
[DataMember]
public Boolean? IsEnabled { get; set; }
#region Navigation Property
[ForeignKey("ServiceId")]
public Service Service { get; set; }
#endregion
}
这是正在调用的 WebAPI 方法...
[HttpPut]
public void UpdateServiceFeature([FromBody]ServiceFeature value)
{
ServiceRepository.Instance.UpdateServiceFeature(value);
}
这是在 AJAX 请求的 RequestBody 中发送的 JSON 字符串(来自 IE 开发工具)...
"{\"Id\":8,\"ServiceId\":3,\"Name\":\"Wrap \",\"Description\":\"Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc \",\"Comments\":\"sdfdsdssd\",\"DateAdded\":\"2013-07-29T23:39:19.46\",\"DateUpdated\":\"08/17/2013\",\"IsEnabled\":true}"
提交 PUT 请求后,我通过 WebAPI 方法跟踪请求,发现 value 参数是 ServiceFeature 的 DEFAULT 实例,其中每个属性都设置为 NULL,而不是用 JSON 字符串中的数据填充的实例。
我是否遗漏了它应该如何工作的东西,或者这种自动映射 MVC 事物和 WebForms 需要不同的方法?
提前致谢!
解决方案更新
这两个建议,“user2674389”添加内容类型“application/json”的评论,以及 Nenad 将 JSON 作为 OBJECT 而不是 STRING 发送的“答案”,都需要才能完成这项工作。我分别尝试了每个,因此我可以将答案归因于正确的成员,但每个都是正确的。我赞成“用户”的评论,并将 Nenad 的回答标记为“接受”。非常感谢你们的帮助!