2017-05-02 5 views
0

私はいくつかの.netコアを学習しており、APIを構築中です。通常、私は角で作業し、そこにリクエストを送信します。AngularJS with .netコアモデルバインディングなし

私は、次の角度スニペットを持っている:

//The data I need to send. 
$scope.PersonalInfo = { 
    firstName: '', 
    lastName: '', 
    companyName: '', 
    email: '', 
    password: '', 
    confirmPassword: '', 
    imageLink: '' 
}; 

はその後、バックエンドモデルは、同じデータのためにあります:

public class UserProfileModel 
{ 

    public string userID { get; set; } 

    public string firstName { get; set; } 

    public string lastName { get; set; } 

    public string companyName { get; set; } 

    public string email { get; set; } 

    public string password { get; set; } 

    public string confirmPassword { get; set; } 

    public string imageLink { get; set; } 
} 

そして最終的にそれを送信する必要があります方法:

$scope.UpdateProfile = function() { 

    var profile = JSON.stringify($scope.PersonalInfo); 

    $http.post('/api/Profile/Users', profile).then(function (response) { 
     debugger; 
     $log.log(profile); 
     $log.log(response); 
    }); 
}; 

私が何回行っても(文字列化されたJSONとしてデータを送信するか、スコープ付きオブジェクトを送信するトン)要求がコントローラに当たったとき、私はこれで終わる:

Model not being bound...

要求が送信される前に$ scope.PersonalInfoはデータがいっぱいです。

ご協力いただきありがとうございます。前もって感謝します。

+0

それを送信する前にJSオブジェクトを文字列化する必要(これははありません'$ http'によって自動的に行われます)。あなたはストリングス化せずに試しましたか? –

+0

はい、私はそれがあってもなくても縛られませんでした。 –

+0

PascalCase ... UserId、FirstNameなどでC#UserProfileModelを作成します。これはおそらくJSONシリアライザ設定と関係があります。 –

答えて

3

投稿コールで[FromBody]属性を指定する必要があります。同じように、

[HttpPost] 
    [Route("api/bar/users")] 
    public IActionResult Users([FromBody]UserProfileViewModel profile) 
    { 

     return Json(new { Data = profile }); 
    } 

これでいいはずです。

FromBody属性を使用する必要があるため、フレームワークはバインドをモデル化するために正しいinput formatterを使用できます。例えば、使用されるデフォルトのフォーマッタ、コンテンツタイプapplication/jsonのはでJson.Net

詳細な情報に基づいてJSONフォーマッタであると:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

+0

偉大な、それは非常にうまくいった。もし私が聞くかもしれない。このようにするためにアノテーションを追加する必要があるのはなぜですか?以前はデフォルトでリクエストの本文からデータを受け取りました。 –

+0

は推論で答えを更新しました。 –