web-dev-qa-db-ja.com

モデルバインディングがASP.NETCore 2WebAPIのPOSTリクエストで機能していません

これが私のモデルです。

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

そしてこれはPOST Fiddlerによってインターセプトされたリクエストです enter image description here

そして、これは私のコントローラーです。

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

私の問題は、[FromBody] Patient patientnullに対して常にpatientを取得していることです。

EDIT 1:ingvarのコメントによると、リクエスト本文のJSONを次のように作成しました:

{patient: {"name":"Leonardo","gender":"",....,"bloodGroup":""}}ですが、今回はプロパティのデフォルト値をゲートします(例:name: ""およびage: 0

EDIT 2:Startup.csファイルのConfigureServicesおよびConfigureメソッド

    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();
    }
10
Towhid

髪を失った後、私は答えを見つけました。リクエストJSONでは、dateOfBirthの値を送信していません。そのため、モデルバインダーはpatientオブジェクト全体をnullに設定しています。したがって、すべてのプロパティの適切な値を送信する必要があります。

3
Towhid