我使用VS.NET在MacOS上创建了一个新的Web API应用程序。我用以下代码添加了一个模型:
public class PersonAddRequest {
[Required]
public string FirstName { get; set; }
public string LastName { get; set; }
}
然后,我像这样创建了一个Web API控制器:
[Route("api/[controller]")]
[ApiController]
public class PeopleController : ControllerBase {
[HttpPost]
public IActionResult Post(PersonAddRequest model) {
return base.Ok(model);
}
}
使用PostMan时,我会这样发布JSON(请注意,缺少firstName):
{
"lastName":"McDonalds"
}
当我在Windows OS验证上创建的Web API应用程序上运行此代码时,将按预期工作。但是,当我在MacOS中创建项目时,验证不起作用。
当我在Windows OS中创建该项目然后在MacOS上打开并运行该项目时,验证就可以了!
所以我的问题是,作为Mac上VS.NET支架的一部分,此功能是否缺少?
答案 0 :(得分:0)
您需要FromBody
属性作为body参数:
[Route("api/[controller]")]
[ApiController]
public class PeopleController : Controller
{
[HttpPost]
public IActionResult Post([FromBody]PersonAddRequest model)
{
return Ok(model);
}
}
这是模型验证所必需的。
Here's an example git repo使用这种形式的模型验证,已确认可在MacOS Mojave 10.14.4上正常工作
答案 1 :(得分:0)
我要感谢@nelsontruran帮助我在Mac上探索VS.NET。我实际上正在运行Mac(10.14.5 Mojave)的更高版本。但是,该版本与原始问题无关。
通过@nelsontruran的患者和持续的帮助,我重新创建了该项目,但是我没有使用建议的模板,而是为正确的应用程序做了一些挖掘(不要相信VS.NET中的建议的应用程序)。这是有关如何创建自动执行模型验证的API的分步说明:
您可以在此处查看@nelsontruran's example on git,以了解模型验证的魔力。
我认为我可能一直在选择“ Web应用程序”,因为它在Mac中和在Windows中是相同的。
对我来说,这是一个简单的疏忽。我希望这对像我这样困惑和挣扎的人有所帮助。
再次感谢您@nelsontruran !!!