web-dev-qa-db-fra.com

Le paramètre Asp.net Core Post est toujours nul

J'envoie POST du violoneur:

POST http://localhost:55924/api/Product HTTP/1.1
User-Agent: Fiddler
Host: localhost:55924
Content-Type: application/json; charset=utf-8
Content-Length: 84

{"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"}

Mais la méthode Post devient toujours nulle.

// POST api/Product
[HttpPost]
public IActionResult PostProduct([FromBody]Product product)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _repo.Add(product);

    return CreatedAtRoute("GetToode",product);
}

Lorsque j'utilise [FormBody], le produit est toujours nul, lorsqu'il n'est pas utilisé, le produit est évalué mais tous les champs sont nuls. La classe de produit est simple.

public class Product
{
    public int ProductID { get; set; }
    public string EAN { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int? CategoryID { get; set; }
}

j'ai essayé d'ajouter NullValueHandling à ConfigureServices comme proposé dans post mais pas d'utilisation. 

services.AddMvc()
    .AddJsonOptions(jsonOptions =>
    {
        jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
    });
7
martinv

Je viens juste de corriger les guillemets dans votre demande POST et cela a fonctionné. Essaye ça:

{"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"}

Voir la capture d'écran ci-dessous.

 Screenshot

4
Ignas

Avait le même problème. Il s'est avéré que je n'avais pas de constructeur public sans paramètre pour la classe d'instance entrante. Dans ce cas, Product n'avait que des constructeurs protégés et le paramètre était toujours nul, quoi qu'il en soit. J'espère que ça aide quelqu'un.

0
Grumpy Android