wake-up-neo.com

Der MVP-Nachparameter von Asp.net core ist immer null

Ich bin neu im MVC-Kern.

Ich habe ein Projekt mit MVC-Kern erstellt, das über einen Controller verfügt. Dieser Controller verfügt über die Aktionsmethoden Get und Post. Wenn ich Daten mithilfe der Abfragezeichenfolge an die Get-Methode übergebe, funktioniert das einwandfrei. Wenn ich jedoch eine komplexe JSON-Methode an die Post-Methode weitergebe, wird mir immer null angezeigt.

Was ich hier mache:

Post-Anfrage

URL: http://localhost:1001/api/users
Content-Type: application/json
Body: 
{
   "Name":"UserName",
   "Gender":"Gender of the user",
   "PhoneNumber":"PhoneNumber of the user"
}

Hier ist die Post-Aktionsmethode

[HttpPost]
[Route("api/users")]
public async Task<IActionResult> Post([FromBody]User newUser)
{
   ...
}

Wenn post request aufgerufen wird, zeigt newUser immer null an. Und wenn ich das [FromBody] -Attribut entferne, erhalte ich das newUser-Objekt, aber alle Felder sind null.

Bitte helfen Sie mir und führen Sie mich in dieser Ausgabe.

BEARBEITET

Hier ist meine User Klasse

public class User{

   public int Id { get; set; }
   public string Name { get; set; }
   public string Gender { get; set; }
   public string PhoneNumber { get; set; }
}

Ich hatte das gleiche wie hier für Json-Daten beschrieben, erhalte aber immer noch Null. 

18
Ravi Patel

Dies kann daran liegen, wie die Nullwerte behandelt werden. Stellen Sie NullValueHandling in AddJsonOptions auf Ignorieren und prüfen Sie, ob dies funktioniert.

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddJsonOptions(jsonOptions=>
        {
            jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        });
}
13
bvoleti

Beachten Sie die ursprüngliche Methode Post([FromBody] User newUser)

Für zukünftige Leser von Google könnte dasselbe Problem auftreten, wenn die Methode Post(User newUser) wäre.

Beachten Sie das lack von [FromBody]. Dies ist eine Abweichung von früheren Versionen von MVC, in denen diese Parameter allgemein abgeleitet wurden.

Wenn Sie bereits ein MVC5 - Entwickler sind und diese Seite in Bezug auf AspNetCore.MVC finden, vergewissern Sie sich, dass Sie [FromBody] gegebenenfalls markiert haben.

10
Chris Marisic

Ich habe ein neues ASP.NET Core-Projekt erstellt, Ihre Funktionalität hinzugefügt und es funktioniert. Bitte checke dieses Projekt auf github.

Siehe auch Screenshot des Protokolls mit einfacher Kommunikation mit diesem Controller über die Browserkonsole: Konsolenausgabe

2
Roman Zinnatov

Sind Sie bei Microsoft.AspNetCore.Mvc 1.0.0?

Wenn Sie möchten, senden Sie dieses Objekt als Körper in einer Anfrage (Eigenschaften im Kamelgehäuse):

{
   "name":"UserName",
   "gender":"Gender of the user",
   "phoneNumber":"PhoneNumber of the user"
}
0
steamrolla