2017-10-15 10 views
3

Ceci est mon modèle.La liaison de modèle ne fonctionne pas sur la requête POST dans ASP.NET Core 2 WebAPI

public class Patient 
{ 
    public string Name { get; set; } 
    public string Gender { get; set; } 
    public double Age { get; set; } 
    public DateTime DateOfBirth { get; set; } 
    public string MobileNumber { get; set; } 
    public string Address { get; set; } 
    public string Occupation { get; set; } 
    public string BloodGroup { get; set; } 
} 

Et ceci est la requête POST interceptée par Fiddler enter image description here

Et ceci est mon contrôleur.

[Produces("application/json")] 
[Route("api/Patient")] 
public class PatientController : Controller 
{   
    [HttpPost] 
    public IActionResult Post([FromBody] Patient patient) 
    { 
     //Do something with patient 
     return Ok(); 
    } 
} 

Mon problème est que je suis toujours obtenir null pour patient dans [FromBody] Patient patient

EDIT 1: D'après le commentaire de Ingvar J'ai fait JSON du corps de la demande comme suit:

{patient: {"name":"Leonardo","gender":"",....,"bloodGroup":""}} mais cette fois je porte la valeur par défaut des propriétés (par exemple name: "" et age: 0)

EDIT 2: Ma méthode ConfigureServices et Configure dans le fichier Startup.cs

public IServiceProvider ConfigureServices(IServiceCollection services) 
    { 
     services.AddCors(); 
     services.AddMvc(); 

     var containerBuilder = new ContainerBuilder(); 
     containerBuilder.RegisterType<PatientRepository>().As<IPatientRepository>(); 
     containerBuilder.RegisterType<UnitOfWork>() 
      .As<IUnitOfWork>() 
      .WithParameter("connectionString", Configuration.GetConnectionString("PostgreConnection"));     
     containerBuilder.Populate(services); 
     var container = containerBuilder.Build(); 
     return new AutofacServiceProvider(container); 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
     } 
     app.UseCors(corsPolicyBuilder => 
      corsPolicyBuilder.WithOrigins("http://localhost:3000") 
      .AllowAnyMethod() 
      .AllowAnyHeader()); 
     app.UseMvc(); 
    } 
+0

probablement besoin de dériver le contrôleur api ou de faire ressembler json à {patient: {nom: "a" ...}}. Avez-vous essayé cela? – ingvar

+0

J'ai fait et s'il vous plaît regardez ma section d'édition. – Towhid

+0

fonctionnera-t-il avec les propriétés capitalisées (comme nom au lieu de nom). aussi, avez-vous essayé PatientController: ApiController au lieu de PatientController: Controller? afaik [frombody] fonctionnera pour apicontroller seulement – ingvar

Répondre

0

Après avoir perdu quelques cheveux que j'ai trouvé la réponse. Dans la demande JSON, je n'envoie pas la valeur dateOfBirth. Et c'est pourquoi le classeur modèle règle l'objet entier patient sur null. Vous devez donc envoyer la valeur correcte de chaque propriété.

+0

Si dateOfBirth est facultatif, vous devez utiliser un DateTime nullable sur votre modèle, puis la liaison doit continuer à fonctionner. – natwallbank