2012-07-17 17 views
40

私はASP.NET MVC 4 RC Web API Parameter Binding Issueのような問題がありますが、[FromBody]属性を使用して解決しようとしています。FromBodyバインディング文字列パラメータでない

フィドラーは、以下の要求(ユーザーエージェント文字列のように無関係なビットを除く)

PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1 
Host: localhost:82 
Connection: keep-alive 
Content-Length: 11 
Origin: http://localhost:3000 
Content-Type: application/x-www-form-urlencoded 
Accept: application/json, text/javascript, */*; q=0.01 

query=apple 

私のコントローラのアクションが

[HttpPut] 
public ShoppingListItemWebModel CreateShoppingListItem([FromBody]string query) { 
    // query is null 
} 

私は複合型でパラメータをラップする可能性があると報告し、それはのように思えます問題を解決するためのハックあるいは、URIにクエリを置くこともできますが、それは残りのAPIのパターンに適合しません。このようにすることは可能ですか?もしそうなら、私のミスはどこですか?

+1

タイトルにPOSTと書かれていますが、質問にはPUTと書かれています。ちょっと誤解を招く – vbullinger

+0

関連する質問のAsp.Netコアhttps://stackoverflow.com/questions/31952002/asp-net-core-mvc-how-to-get-raw-json-bound-to-a-string-without-a-タイプ –

答えて

44

変更申請は

PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1 
Host: localhost:82 
Connection: keep-alive 
Content-Length: 11 
Origin: http://localhost:3000 
Content-Type: application/x-www-form-urlencoded 
Accept: application/json, text/javascript, */*; q=0.01 

=apple 

予告「クエリ」の欠如であることを

+2

体から複数の文字列を抽出する方法はありますか? –

+5

できない場合は、複合型を使用する必要があります。 Mike Stallには、Web APIモデルバインディングに興味のある方にお勧めの素晴らしいブログがあります。http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter- binding.aspx –

+0

もちろん[FromUri]を使用して複数の単純型パラメータを渡す –

21

あなたはAngularJSのコンテンツを使用していますので、あなたは、次の代替を選ぶしたい場合があります代わりにjQueryのAngularJSを使用している場合デフォルトでapplication/jsonと入力します。

PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1 
Host: localhost:82 
Connection: keep-alive 
Content-Length: 7 
Origin: http://localhost:3000 
Content-Type: application/json 
Accept: application/json, text/javascript, */*; q=0.01 

'apple' 

値が文字列引用符で囲まれていることに注意してください(1文字​​または2文字のいずれか)。

+10

angleでは、[angular.toJson](https://docs.angularjs.org/api/ng/function/angular.toJson)を使用してペイロードをエンコードすることで、見積のラッピングを取得できます。 – Richard

+0

@Stonyありがとう、それは素晴らしいヒントです –

関連する問題