2016-04-04 9 views
2

インターフェイスオブジェクトのリストを含むモデルをWebApiコントローラアクションに投稿することはできますか?ASP.NET WebApiにインターフェイスオブジェクトのリストを投稿する方法

次のようにしますが、私のモデルはnullではありませんが、 "Items"プロパティにはエントリがありません。ここで

は私のコードです:

Controller.js

public void Post(MyModel model) 
{ 
    ... 
} 

MyModel.cs

public class MyModel 
{  
    public int Id { get; set; } 
    public string Name { get; set; } 
    public IEnumerable<IItem> Items { get; set; } 
} 

IItem.cs

public interface IItem 
{ 
    string Test1 { get; set; } 
    string Test2 { get; set; } 
} 

Item.cs

public class Item : IItem 
{ 
    public string Test1 { get; set; } 
    public string Test2 { get; set; } 
} 

私はそれがカスタムモデルバインダーで可能だと思うが、私は、適切な例を見つけることができません。

+1

コントローラのアクションには、カスタムモデルクラスのパラメータのないコンストラクタが必要ですが、インターフェイスにはそれがありません。 –

答えて

2

は、私の知る限り、デフォルトのモデルバインダーが唯一そうにMyModel.Itemsプロパティを変更、具象クラスをバインドすることができます承知しているよう:予想通り

IEnumerable<Item> Items { get; set; } 

は動作するはずです。あなたには、いくつかの理由でタイプを変更することはできませんただし場合は、次のいずれかです。

  1. は、すでに

  2. のみ使用してビューモデルを作成して述べてきたようにIItemインタフェースをサポートするためのカスタムモデルバインダーを作成します。具体的なクラス。既存のタイプをビューモデルにマップする必要がありますが、これはカスタムモデルのバインダーIMOを作成するよりはるかに簡単です。

関連する問題