2016-07-18 9 views
0

これはasp.net 5/mvcからです。私は2つのコントローラメソッドを持っています。それぞれ1つのパラメータを取り、それぞれが文字列を返します。 1つのメソッドは文字列パラメータを取り、もう1つのメソッドは単純なオブジェクトを取ります。 stringパラメータを受け取るメソッドは機能しません(入力パラメータの値は常にnullです)。単純なオブジェクトに渡される呼び出しは機能します。私は$ HTTPサービスを使って角型コントローラの内部からこれらのメソッドを呼び出すことにしています。私は間違ったことをやっているに違いないが、それはとてもシンプルだが、私はそれを見ない。ここasp.netルートの問題は何ですか

は、コントローラクラスのコードである:ここ

[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    [HttpPost("PostWithStringParam")] 
    public string PostWithStringParam([FromBody] string val) 
    { 
     return val ?? "<null>"; 
    } 

    [HttpPost("PostWithInputparam")] 
    public string PostWithInputParam([FromBody] TestInputClass val) 
    { 
     string ret = "<null>"; 

     if (val != null) 
     { 
      ret = $"First Name: {val.Name}, City: {val.City}"; 
     } 

     return ret; 
    } 
} 

は角コントローラから関連するコードです。 「go」機能は、ボタンからng-clickまで配線されています。

vm.inputObject = { 
     name: "George", 
     city: "Chicago" 
    } 

    vm.inputString = "some data"; 

    var callApi = function(url, data) { 

     $http({ 
      method: "POST", 
      url: url, 
      data: data 
     }).then(
      function (result) { 
       alert(result.data); 
      }, 
      function (error) { 
       alert(error.status); 
      } 
     ); 
    } 

    var callStringApi = function() { 

     var url = "api/values/PostWithStringParam"; 

     callApi(url, vm.inputString); 
    } 

    var callObjectApi = function() { 

     var url = "api/values/PostWithInputParam"; 

     callApi(url, vm.inputObject); 
    } 

    vm.go = function() { 

     callStringApi(); 
     callObjectApi(); 
    } 

入力文字列を受け取るメソッドが機能しない理由を教えてください。

ありがとうございます!

+0

なぜ単純なタイプの[FromBody]を使用しますか? – aguetat

答えて

1

データを送信するときは、データをstrinfigyし、application/jsonとしてcontentTypeを指定する必要があります。デフォルトのモデルバインダーは、投稿されたデータをマップすることができます。

var callApi = function(url, data) { 

    $http({ 
     method: "POST", 
     url: url, 
     data: JSON.stringify(data), 
     contentType:"application/json" 
    }).then(
     function (result) { 
      alert(result.data); 
     }, 
     function (error) { 
      alert(error.status); 
     } 
    ); 
} 
+1

これは機能しました!ありがとう。 –

+0

Cool。 [ここで](http://stackoverflow.com/questions/20226169/how-to-pass-json-post-data-to-web-api-method-as-object)は、ウェブAPIへの投稿 – Shyju

関連する問題