2017-05-02 4 views
0

Also habe ich gelernt, einige. NET-Core und ich bauen eine API damit. Normalerweise würde ich mit eckigen arbeiten und dort Anfragen senden.AngularJS mit .net-Core-Modell nicht verbindlich

Ich habe folgende Winkel Schnipsel:

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

Dann gibt es die Back-End-Modell für die gleichen Daten:

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; } 
} 

Und schließlich die Methode, die es senden soll:

$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); 
    }); 
}; 

Egal, wie viele Änderungen ich gemacht habe (senden Sie die Daten als stringed JSON, oder senden Sie das Zielobjekt t), wenn die Anfrage den Controller trifft, habe ich am Ende mit auf den Punkt:

Model not being bound...

$ scope.PersonalInfo mit Daten gefüllt ist, bevor die Anforderung gesendet wird.

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

+0

Es gibt keine Notwendigkeit, das JS-Objekt stringify vor dem Senden (dies ist erfolgt automatisch durch '$ http'). Hast du es ohne die Stringifizierung versucht? –

+0

Ja, ich habe es nicht mit oder ohne es gebunden. –

+0

machen Sie Ihr C# UserProfileModel in PascalCase ... UserId, FirstName etc ... Dies hat wahrscheinlich mit den JSON-Serializer-Einstellungen zu tun. –

Antwort

3

Sie müssen [FromBody] -Attribut in Ihrem Postanruf erwähnen. Wie So,

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

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

Das sollte es tun.

Die Notwendigkeit, das FromBody Attribut zu verwenden, ist so, dass das Framework die richtige input formatter verwenden kann, um zu binden. Das Standard-Formatierungsprogramm verwendet wird, zum Beispiel mit Inhaltstyp application/json ist der JSON Formatierer basierend auf Json.Net

Detaillierte Informationen unter: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

+0

Großartig, das hat sehr gut funktioniert. Wenn ich fragen darf. Warum ist es notwendig, die Annotation dafür hinzuzufügen, um es so zu machen? Früher hat es standardmäßig Daten aus dem Body des Requests akzeptiert. –

+0

aktualisiert die Antwort mit der Begründung. –

Verwandte Themen