使用数据注释的模型验证在Mac VS.NET上不起作用

时间:2019-05-15 23:09:56

标签: macos rest asp.net-core

我使用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支架的一部分,此功能是否缺少?

2 个答案:

答案 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的分步说明:

  1. 为Mac打开VS.NET
  2. 创建一个新项目
  3. 当系统提示您“为新项目选择模板”时,请在左侧窗格的“ .Net Core”部分下选择“ App”。
  4. 在右侧窗格中,选择API

您可以在此处查看@nelsontruran's example on git,以了解模型验证的魔力。

我认为我可能一直在选择“ Web应用程序”,因为它在Mac中和在Windows中是相同的。

对我来说,这是一个简单的疏忽。我希望这对像我这样困惑和挣扎的人有所帮助。

再次感谢您@nelsontruran !!!