0

私はangularjsを使用しています。私はWeb APIにHttpPostを呼び出そうとしています。web api 2パラメータ付きの投稿 - json.stringyfiを使用する必要があります

私のAPIメソッド:

[HttpPost] 
    [Route("authentication/getkey")] 
    public IHttpActionResult GetKey([FromBody]string password) { 
     //Do stuff 
    } 

私のコール:

service.getKey = function (password) { 
      return $http.post('api/authentication/getkey', JSON.stringify(password)) 
       .then(function(result) { 
        return result.data; 
       }); 
     } 

は今、これは正常に動作しますが、私は本当にJSON.stringifyを使用する必要がありますか?私は以下のように送信しようとしましたが、それらのすべてがpassword = nullを取得します。 JSON.stringifyを使用する必要がありますか、他の例で間違っていますか?マイクロソフトのWeb API公式ドキュメントから

//Doesnt work 
service.getKey = function (password) { 
    return $http.post('api/authentication/getkey', password) 
     .then(function(result) { 
      return result.data; 
     }); 
    } 

//Doesnt work 
service.getKey = function (password) { 
    return $http.post('api/authentication/getkey', {password}) 
     .then(function(result) { 
      return result.data; 
     }); 
    } 
+0

デフォルトでは、$ HTTPサービスがContent-Typeをapplication/jsonとして送信するため、POSTリクエスト内のデータをJSON形式で送信する必要があります。 JSON.stringifyは、データをJSON(JavaScript Object Notation)文字列に変換します。 JSON.stringifyを使用したくない理由はありますか? 1つの方法は、Content-Typeを変更することです。必要に応じてサンプルコードを提供することができます。 –

+0

@ VivekNしてください。私はちょうどそれをする方法の他の例を見たいと思うか、または私はそれをやるべきか – MrProgram

答えて

2

(jQueryの$.param(..)に似たものを使用して)フォームパラメータとして、あなたの体をフォーマットする必要がありますJSON.stringifyを使用したい場合、もう1つのオプションは、application/x-www-form-urlencodedというデータを他の回答も指すように送信することです。この方法で、データをフォームデータとして送信します。私は$ http.postショートカットメソッドの構文についてはわかりませんが、アイデアは同じです。

2

についてParameter Binding in ASP.NET Web API

パラメータは、Web APIは、フォーマッタを選択するために、Content-Typeヘッダを使用して、[FromBody]持っています。この例では、コンテンツタイプは「application/json」で、リクエスト本文は未処理のJSON文字列です(JSONオブジェクトではありません)。あなたがofficial docsから見ることができるよう

角度$httpサービスは、POSTリクエストでは、デフォルトでヘッダーとしてContent-Type: application/jsonを送信し、そのウェブAPIは、彼のJsonFormatterを使用して、リクエストボディをバインドしようとしています。このため、生の文字列パラメータを正しくバインドするには、適切な形式のJson文字列(内部に文字列を持つJsonオブジェクトではありません)を提供する必要があります。サイドノートとして

は、あなたも application/x-www-form-urlencoded Content-Typeとしてヘッダーを使用して要求を送信することができますが、そうでないなら、あなたは

関連する問題