Validation ASP.NET Core 2.0中的字段验证

Validation ASP.NET Core 2.0中的字段验证,validation,asp.net-core,request,asp.net-core-2.0,Validation,Asp.net Core,Request,Asp.net Core 2.0,我在POST请求的主体中得到一个JSON字符串,如下所示: { "payload": { "email": "example@test.com", "password": "example" } } 我的问题是,如何验证ASP.NET Core 2.0中的电子邮件和密码字段?首先,创建具有数据注释验证属性的模型。有许多现成的验证属性,您也可以创建自己的属性 公共类请求 { [必需] 公共SomeRequestPayload有效负载{get;set;} } 公共类有效负载

我在POST请求的主体中得到一个JSON字符串,如下所示:

{
  "payload": {
    "email": "example@test.com",
    "password": "example"
  }
}

我的问题是,如何验证ASP.NET Core 2.0中的电子邮件密码字段?

首先,创建具有数据注释验证属性的模型。有许多现成的验证属性,您也可以创建自己的属性

公共类请求
{
[必需]
公共SomeRequestPayload有效负载{get;set;}
}
公共类有效负载
{
[RegularExpression(“某些正则表达式”,ErrorMessage=“无效电子邮件”)]
[必需]
公共字符串电子邮件{get;set;}
[RegularExpression(“某些正则表达式”,ErrorMessage=“无效密码”)]
[必需]
公共字符串密码{get;set;}
}
然后检查控制器操作中的
ModelState
。当MVC将请求主体绑定到方法参数时,它将验证模型并保留
ModelState
中的任何错误

[HttpPost(“”)
公共异步任务PostPayload([FromBody]SomeRequest-SomeRequest)
{
//检查是否有人送出尸体
if(someRequest==null)
返回此.BadRequest(“空”);
//检查主体是否有任何错误
如果(!this.ModelState.IsValid)
返回此.BadRequest(此.ModelState);
//请在此插入
返回这个.Created(“someLocation”,someModel);
}

验证这些字段的方法很多。我更喜欢使用
FluentValidation
库和附加的包
FluentValidation.AspNetCore
,它将验证集成到
ASP.NET核心管道中

使用这种方法有很多好处

简单地说,您应该执行以下几个步骤:

dotnet添加包FluentValidation.AspNetCore

public class AuthViewModelValidator : AbstractValidator<AuthViewModel>
{
    public AuthViewModelValidator()
    {
        RuleFor(reg => reg.Email).NotEmpty().EmailAddress();
        RuleFor(reg => reg.Password).NotEmpty();
    }
}
最后对模型进行了验证

[HttpPost]
public IActionResult FormValidation(AuthViewModel model)
{
    if (this.ModelState.IsValid) {
        ViewBag.SuccessMessage = "Great!";
    }
    return View();
}

有很多方法可以进行验证。A你试过什么?我试过ASP的内置功能,包括注释和modelstate。但是我不知道是应该为每个请求创建一个请求类,还是为一个请求创建一个类。请求模型的数量取决于您的实体结构。如果你想有一些可重用性,你可以从基类继承属性。你需要给我们更多的细节。您想要什么样的验证?您想要服务器端验证还是客户端验证(或两者都要)?到目前为止你试过什么?什么有效,什么无效?这是我的错,我需要服务器端验证。我在后端使用C#。我的问题是,我不确定创建多个请求类是否好。
[HttpPost]
public IActionResult FormValidation(AuthViewModel model)
{
    if (this.ModelState.IsValid) {
        ViewBag.SuccessMessage = "Great!";
    }
    return View();
}