web-dev-qa-db-ja.com

Asp.net CorePostパラメーターは常にnullです

私はフィドルからPOSTを送信しています:

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

ただし、Postメソッドは常にnullになります。

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

    _repo.Add(product);

    return CreatedAtRoute("GetToode",product);
}

[FormBody]を使用する場合、productは常にnullです。使用しない場合、productは評価されますが、すべてのフィールドがnullになります。製品クラスは単純です。

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

post で提案されているように、NullValueHandlingをConfigureServicesに追加しようとしましたが、使用できません。

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

POSTリクエストの二重引用符を修正する必要がありましたが、機能しました。これを試してください:

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

以下のスクリーンショットを参照してください。

Screenshot

6
Ignas

同じ問題がありました。着信インスタンスのクラス用のパブリックパラメーターレスコンストラクターがないことが判明しました。この場合、Productには保護されたコンストラクターのみがあり、パラメーターは何があっても常にnullでした。それが誰かを助けることを願っています。

同様の問題が発生しましたが、OPとしてのModelStateの有効性を確認できませんでした。これが発生した場合、デバッグモードで検査すると、モデルの何が問題になっているのかがわかる可能性があります。

QuickWatch window

この例では、無効な文字列'A'Guidプロパティのテスト値として使用していたため、モデルは常にnullでした。

0
jcespinoza