繁体   English   中英

ASP NET Core 2模型验证不正确

[英]ASP NET Core 2 Model Validation Incorrect

我正在测试ASP.NET Core 2.0服务,以扩展我的编程知识,以包括服务器端经验。 我有一个注册模型类,当用户在我的应用程序中注册时,该类会发送到服务。 我的RegistrationModel类如下:

public class RegistrationModel
{
    [Required]
    public string Username { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Required]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

我正在调用的RegisterUser方法如下。 我正在将数据发布到服务并从调用Body中检索数据。

[HttpPost(nameof(RegisterUser))]
[AllowAnonymous]
public async Task<IActionResult> RegisterUser([FromBody] RegistrationModel registrationInfo)

将JSON发送到服务时,除非发送空对象,否则ModelState.IsValid 始终为 true。 如果我发送一个完全空的对象,则ModelState.IsValid仍然为true 我还尝试了从方法的参数列表中删除[FromBody] ,并且没有任何改变。

是否需要在startup.cs文件中设置一些选项来自动验证模型,还是我需要自己进行手动验证? 如果我需要提供其他信息,请告诉我。

在我的服务中,我调用的是services.AddMvcCore()而不是services.AddMvc()因为它严格来说是Api,并且没有面向Web的视图。

使用services.AddMvcCore() ,必须指定services.AddMvc()默认提供的许多功能。 我未指定的一个功能是.AddDataAnnotations() 将其添加到我现有的services.AddMvcCore().AddJsonFormatters().AddAuthorization=(...)调用中services.AddMvcCore().AddJsonFormatters().AddAuthorization=(...)修复了所有问题。

开箱即用地启用模型验证。

我基于Visual Studio提供的ASP.NET Core 2.0模板创建了一个新项目,并且工作正常。

这是该操作的实现:

public Task<IActionResult> Register([FromBody] RegistrationModel model)
{
    return Task.FromResult<IActionResult>(Ok(new { ModelState.IsValid, ModelState.Values }));
}

发送以下JSON:

{
    "Username": "Mick",
    "FirstName": "Mick",
    "LastName": "Mick",
    "Email": "mick@mick.com",
    "Password": "MickMick",
    "ConfirmPassword": "MickMick"
}

制作:

{
    "isValid": true,
    "values": []
}

但是,发送以下有效负载:

{
    "Username": "Mick",
    "FirstName": "",
    "LastName": "Mick",
    "Email": "",
    "Password": "MickMick",
    "ConfirmPassword": ""
}

产生以下响应:

{
  "isValid": false,
  // some properties omitted for brevity
  "values": [
    {
      "key": "Email",
      "errors": [
        {
          "errorMessage": "The Email field is required."
        }
      ]
    },
    {
      "key": "FirstName",
      "errors": [
        {
          "errorMessage": "The FirstName field is required."
        }
      ]
    },
    {
      "key": "ConfirmPassword",
      "errors": [
        {
          "errorMessage": "The ConfirmPassword field is required."
        },
        {
          "errorMessage": "The password and confirmation password do not match."
        }
      ]
    }
  ]
}

您能描述一下您如何命中端点以及您在请求中发送的有效载荷是什么吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM