15

ASP.NET Web APIルートが与えられた場合:

example/{Id}

これは、次のApiControllerアクションメソッドにマップされます。

public void Example(Model m)
{
    ...
}

モデルクラスを次のように定義します。

public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }
}

JSON{ "Name": "Testing" }をURL/example/123に投稿するIdと、オブジェクトのプロパティがModelバインドされません。123ではなく0のままです。

モデルバインディングにルートデータの値も含めるにはどうすればよいですか?一般的なユースケースのように見えるカスタムモデルバインダーを作成する必要はありません。任意のアイデアをいただければ幸いです。ありがとう!

4

4 に答える 4

11

探しているものを実現する最も簡単な方法は、別のパラメーターをメソッドに追加し、どのパラメーターが要求のどの部分から来るかを指定することです。

例:

[HttpPost]
public void Example([FromUri]int id, [FromBody]Model m) {
    // ...
}

これで、ルート/examples/{id}が正常にバインドできるようになります。メソッドには、URI で探してExampleいるというパラメーターが含まれているためです。idモデルにデータを入力するには、そこに ID を渡すか、次のようにします。

[HttpPost]
public void Example([FromUri]int id, [FromBody]Model m) {
    m.Id = id; // Make sure the model gets the ID as well.
}

次に、上記のように投稿するだけ{ "Name": "Testing" }です。/example/123

于 2012-12-20T18:30:18.913 に答える
5

組み込みの ModelBinding インフラストラクチャは、URI と本文の両方からのオブジェクトの部分バインディングをサポートしていません。ただし、カスタム IActionValueBinder を実装して、このタスクを実行できます。たとえば、ブログ投稿http://blogs.msdn.com/b/jmstall/archive/2012/04/18/mvc-style-parameter-binding-for-webapi.aspxを参照してください。

于 2012-08-24T22:05:15.120 に答える
3

これに対して推奨されるプロセスは、通常は/exampleではなく に投稿することです/example/{id}。(ただし、通常は Web API を使用します/api/{controller})

このページの半分にある表を確認してください: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

「ASP.NET Web API を使用してレコードを挿入する」のこのリンクも確認してください - http://stephenwalther.com/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx

于 2012-08-08T10:37:43.987 に答える
0

デフォルトのバインダーがIdルート値をModelIdプロパティに関連付けることができるとは思わないので、d1k_isの答えが何であれ、それが得られるのと同じくらい良いと思います。それか、独自のバインダーを作成するかのいずれかです(より一般的なバインダーを作成できる可能性がありますか?-DomainEntityスーパークラスなどがある場合は...)

于 2012-08-08T11:24:19.350 に答える