📜  ASP.Net MVC验证(1)

📅  最后修改于: 2023-12-03 14:39:22.576000             🧑  作者: Mango

ASP.NET MVC验证

ASP.NET MVC提供了多种验证方法,以确保应用程序的安全性和有效性。这些验证方法包括:

  • 模型验证
  • 自定义验证器
  • 简单成员验证
  • 复杂类型验证
  • 表单验证器
  • 远程验证器
模型验证

模型验证是验证ASP.NET MVC模型中数据的最简单和最常见的方式。模型验证可以确保数据输入是有效的,并将错误信息返回给用户。例如,可以使用以下代码在模型验证中定义一个规则:

[Required]
[StringLength(100, MinimumLength = 3)]
public string Name { get; set; }

此代码段定义了一个Required和StringLength的属性。Required属性要求Name属性是必需的,而StringLength属性指定该属性的长度应该在3到100之间。

自定义验证器

自定义验证器是一个用于验证输入数据的自定义方法。自定义验证器可以执行更高级或更复杂的验证。以下是一个自定义验证器的示例代码:

public class CustomValidator : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null) {
            string input = value.ToString();
            if (input.Contains("example")) {
                return new ValidationResult("输入值不允许 example。");
            }
        }
        return ValidationResult.Success;
    }
}

假设我们想要确保用户没有输入“example”作为任何字符串中的一部分。我们可以创建一个类来保存这个验证器,并将它应用到我们的模型类,如下所示:

public class MyModel
{
    [CustomValidator]
    public string MyProperty { get; set; }
}

CustomValidator现在会在验证过程中执行,并为MyProperty属性执行自定义验证。

简单成员验证

简单成员验证是验证基元类型(例如字符串、整数、布尔值等)的一种方式。以下是一个示例代码片段,演示如何执行基元类型验证:

[HttpPost]
public ActionResult Create(int id, [Range(1, 99)] int age, [StringLength(50)] string name)
{
    //...
}

上述代码将验证整数age和字符串name是否有效。

复杂类型验证

当您需要验证模型中的复杂类型时,可以使用复杂类型验证。例如,您可能有一个包含多个属性的类,而不是一个基元类型属性。以下是一个示例方法,用于验证包含多个属性的类:

[HttpPost]
public ActionResult Create(Person person)
{
    if (!ModelState.IsValid)
    {
        // 返回错误视图
    }
    //...
}

public class Person
{
    [Required(ErrorMessage="名称为必填项。")]
    public string Name { get; set; }

    [Range(1, 100)]
    [Required(ErrorMessage="年龄为必填项。")]
    public int Age { get; set; }
}
表单验证器

表单验证器是一种在后端执行的验证器,可以确保表单的数据完整性。以下是一个表单验证器的示例方法:

[HttpPost]
public ActionResult Create(Person person)
{
    if (!HasValidAntiForgeryToken())
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    //...
}

private bool HasValidAntiForgeryToken()
{
    return ((Request.Headers["AntiForgeryToken"] != null) && (Request.Headers["AntiForgeryToken"] == "secret_token"));
}

在这个例子中,ValidateAntiForgeryToken特性用于确保请求来自我们的应用程序,并且仅当请求签名与预期值完全相同时才接受请求。

远程验证器

远程验证器是一种在前端执行的验证器,可以确保输入的数据与预期值匹配。以下是一个远程验证器的示例方法:

[HttpPost]
public JsonResult IsEmailAvailable(string email)
{
    bool isEmailAvailable = UserService.IsEmailAvailable(email);
    return Json(isEmailAvailable, JsonRequestBehavior.AllowGet);
}

在这个例子中,当我们输入一个电子邮件地址时,我们向服务器发送了一个请求,服务器将检查电子邮件是否可用,并将结果/错误消息返回给我们的应用程序。这是通过使用Ajax实现的,因此它是在前端完成的。

结论

上述方法提供了多种方式来验证数据并确保应用程序的有效性和安全性。您可以根据您的需要选择一种方法,或者使用这些方法的组合来确保最强大的验证流程。