ASP.NET WebForms アプリケーションがあります。その中で、さまざまな情報を取得する Web API サービスのホスティングに成功しています。ここで、オブジェクトを PUT (更新) する必要があります。定義されたモデル/クラスにマップされている場合、そのモデル/クラスのインスタンスとして PUT メソッドによって受信できる JSON 文字列を送信できることは、私の理解です。
これが私のモデルです...
[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 Dev Tools から) ...
"{\"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 メソッドを介して要求を追跡し、値パラメーターが JSON 文字列からのデータで満たされたインスタンスではなく、すべてのプロパティが NULL に設定されている ServiceFeature の DEFAULT インスタンスであることを発見しました。
これがどのように機能するのか、またはこの自動マッピングは MVC のものであり、WebForms には別のアプローチが必要ですか?
前もって感謝します!
ソリューションの更新
これを機能させるには、コンテンツタイプ「application/json」を追加するための「user2674389」によるコメントと、JSON を STRING ではなく OBJECT として送信するための Nenad による「回答」の両方の提案が必要でした。答えを正しいメンバーに帰することができるように、それぞれを個別に試しましたが、それぞれが正しかった. 「ユーザーの」コメントに賛成票を投じ、ネナドの回答を「承認済み」とマークしました。お二方、ご協力ありがとうございました!