2016-08-26 18 views
1

属性は[FromBody]ですか?私は例のためにそれを使用するとき、私は、意味:C#の[FromBody]属性の機能は何ですか?

public async Task SetUser([FromBody]User user)

を、私が使用している場合:

public async Task SetUser(User user)

サーバは問題なく同じオブジェクトを取得し、そう、それは必要なセットだこと、または私は心配することなくそれを取り除くことができますか?

Grettings!

+0

詳細については、このリンクをチェックしてください:http://stackoverflow.com/questions/24625303/why-do-we-have-to-specify-frombody-and-fromuri-in-asp-net-web-api – Vijai

答えて

5

Userは複雑な型です。したがって、デフォルトでは、サーバーは要求本体から解決しようとします。シンプルなタイプの場合(例:

public async Task SetUser(string userId) 

サーバーはURLバインディングを介して値を解決しようとします。あなたは、私は通常、単に読みやすさのために署名に[FromBody]を残す

public async Task SetUser([FromBody] string userId) 

を指定することにより、その動作をオーバーライドすることができます。

2

URIを介して、または要求本体の一部として、パラメータをサーバーに渡す方法は2通りあります。

データがURIで渡されると、クエリ文字列になります。 http://server.com/something?userId=5。これは、引数がint userIdのアクションメソッドによって処理されます。

データがリクエスト本体で渡されると、URIでデータが表示されません。たとえば、http://server.com/somethingとなります。パラメータは、要求本体の中で名前と値の組として渡されます。

しかし、ボディを通して何かを渡すためには、ボディがなければならず、GETリクエストは通常​​リクエストボディを持っていません(技術的には持っていますが、パラメータを渡すアクションメソッドをGETする)。通常、POSTアクションメソッドでは、引数はFromBody属性で修飾されています。同様に、通常、GETアクションはURIを介して引数を受け取ることを期待しています。これは、GETメソッドの目的に沿ったものです。

動作を制御するには、FromUriまたはFromBodyのいずれかを指定します。カスタムバインドを定義できるようにする属性もBindModelです。

関連する問題