模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求
Posted
技术标签:
【中文标题】模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求【英文标题】:Model binding is not working on POST request in ASP.NET Core 2 WebAPI 【发布时间】:2018-03-27 00:09:39 【问题描述】:这是我的模型。
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;
这是 Fiddler 截获的 POST 请求
这是我的控制器。
[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 patient
中的patient
总是得到null
编辑 1: 根据 ingvar 的评论,我制作了如下请求正文的 JSON:
patient: "name":"Leonardo","gender":"",....,"bloodGroup":""
但这次我选择了属性的默认值(例如name: ""
和age: 0
)
编辑 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();
【问题讨论】:
可能您需要派生 api 控制器或使 json 看起来像 患者:name:"a" ... 。你试过吗? 我已经完成了,请查看我的编辑部分。 它是否适用于大写的属性(例如名称而不是名称)。另外,您是否尝试过 PatientController : ApiController 而不是 PatientController : Controller ? afaik [frombody] 仅适用于 apicontroller 刚刚尝试使用大写的属性。这是行不通的。这是.NET Core 2,根据andrewlock.net/model-binding-json-posts-in-asp-net-core,您需要使用[FromBody]
有趣。你在 configureservices (startup.cs) 中有services.AddMvc();
吗?似乎[frombody]
应该适用于像"name":"Leonardo","gender":"",....,"bloodGroup":""
这样的数据...
【参考方案1】:
脱发后,我找到了答案。在请求 JSON 中,我没有发送 dateOfBirth
的值。这就是模型绑定器将整个patient
对象设置为null
的原因。所以你需要发送每个属性的正确值。
【讨论】:
如果 dateOfBirth 是可选的,您应该在模型上使用可为空的 DateTime,那么绑定应该继续工作。【参考方案2】:我花了整整一个小时才发现问题是我忘记在类的属性之后添加 getter 和 setter。
即 get; set;
希望能帮助到别人。
【讨论】:
在浪费了一天并尝试了一切之后,我找到了这个答案。这行得通。 @SwanandPangam 很高兴我能帮上忙 拯救了我的一天,谢谢。以上是关于模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)
asp.net core 2.1,Include() 函数不适用于 db first 方法