3

私がやろうとしていることは、誰かが次のいずれかを投稿できるようにすることです:

[{...}, {...}] or {...}ルートに正しくバインドするには:

...Post(IEnumerable<MyModel> models)

コレクションを投稿すると正常に動作します([{...}, {...}]ただし、有効なjsonを単一のオブジェクトとして投稿するときに、1つのオブジェクトでコレクションを作成したいと思います({...}

これを実行しようとしている理由は、実行時にユーザーが定義したモデルに対して API が動的に動作するため、uri がリストを表しているのか単一のリソースを表しているのかわからないためです。

私は顧客の IModelBinder でこれを達成できましたが、カスタム コードなしでこのユース ケースを処理するために jsonserializer を取得する方法があるかどうか疑問に思っていましたか?

4

1 に答える 1

2

1 つの解決策は、2 つの API メソッドが同じロジックを実行するプライベート メソッドを呼び出すようにすることです。例えば:

public HttpResponseMessage Post(IEnumerable<MyModel> models)
{
    return DoSomething(models);
}

public HttpResponseMessage Post(MyModel model)
{
    return DoSomething(new List<MyModel> { model });
}

private HttpResponseMessage DoSomething(IEnumerable<MyModel> models)
{
    // Do something
}

Web API は、渡されたパラメーターに基づいてどちらが呼び出されるかを判断しますが、どちらも内部で同じコードを共有します。

更新:パラメーターが本体から取得されている場合は、ここで説明されているいくつかの解決策があります: ASP.Net WebApi オーバーロードされたメソッドを使用する方法?

于 2013-11-04T17:08:43.807 に答える