ASP.NET Core应用程序12:使用模型验证

ASP.NET Core Web Razor Pages系列教程:使用ASP.NET Core创建Razor Pages Web应用程序 本系列教程翻译自微软官方教程 本系列教程介绍了构建Razor Pages Web应用程序的基础知识。 本系列包括以下教程: 创建一个Razor Pages网络应用程序 将模型添加到Razor Pages应用程序 脚手架(生成)剃刀页面 使用数据库 更新Razor页面 添加搜索 添加一个新字段 添加验证 最后,您将拥有一个可以显示和管理电影数据库的应用程序: ... 阅读详情

  模型验证是确保请求中提供的数据是有效的。
  本章描述 ASP.NET Core 数据验证功能。解释了如何显式地执行验证,如何使用属性来播述验证约束,以及如何验证单个属性和整个对象。演示了如何向用户显示验证消息,以及如何通过客户端和远程验证改进用户的验证体验。

1 准备工作

  继续使用上一章项目。
  修改 Views/Form 文件夹的 Form.cshtml。

@model Product
@{
    Layout = "_SimpleLayout";
}

<h5 class="bg-primary text-white text-center p-2">HTML Form</h5>
<form asp-action="submitform" method="post" id="htmlform">
    <div class="form-group">
        <label asp-for="Name"></label>
        <input class="form-control" asp-for="Name" />
    </div>
    <div class="form-group">
        <label asp-for="Price"></label>
        <input class="form-control" asp-for="Price" />
    </div>
    <div class="form-group">
        <label>CategoryId</label>
        <input class="form-control" asp-for="CategoryId" />
    </div>
    <div class="form-group">
        <label>SupplierId</label>
        <input class="form-control" asp-for="SupplierId" />
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

  替换 Controllers 文件夹中 FormController.cs 。

public class FormController : Controller
{
    private DataContext context;
    public FormController(DataContext dbContext)
    {
        context = dbContext;
    }
    public async Task<IActionResult> Index(long? id)
    {
        var result = await context.Products
            .FirstOrDefaultAsync(p => id == null || p.ProductId == id);
        return View("Form", result);
    }
    [HttpPost]
    public IActionResult SubmitForm(Product product)
    {
        TempData["name"] = product.Name;
        TempData["price"] = product.Price.ToString();
        TempData["categoryId"] = product.CategoryId.ToString();
        TempData["supplierId"] = product.SupplierId.ToString();
        return RedirectToAction(nameof(Results));
    }
    public IActionResult Results()
    {
        return View(TempData);
    }
}

2 理解对模型验证的需要

  验证数据最直接的方法是在操作或处理程序方法中进行验证。

[HttpPost]
public IActionResult SubmitForm(Product product)
{
    if (string.IsNullOrEmpty(product.Name))
    {
        ModelState.AddModelError(nameof(Product.Name), "Enter a name");
    }
    if (ModelState.GetValidationState(nameof(Product.Price))
            == ModelValidationState.Valid && product.Price < 1)
    {
        ModelState.AddModelError(nameof(Product.Price),
            "Enter a positive price");
    }
    if (!context.Categories.Any(c => c.CategoryId == product.CategoryId))
    {
        ModelState.AddModelError(nameof(Product.CategoryId),
            "Enter an existing category ID");
    }
    if (!context.Suppliers.Any(s => s.SupplierId == product.SupplierId))
    {
        ModelState.AddModelError(nameof(Product.SupplierId),
            "Enter an existing supplier ID");
    }
    if (ModelState.IsValid)
    {
        TempData["name"] = product.Name;
        TempData["price"] = product.Price.ToString();
        TempData["categoryId"] = product.CategoryId.ToString();
        TempData["supplierId"] = product.SupplierId.ToString();
        return RedirectToAction(nameof(Results));
    }
    else
    {
        return View("Form");
    }
}

  对于创建的 Product 参数的每个属性,检查用户提供的值,并记录使用从 ControllerBase 类承的 ModelState 属性返回的 ModelStateDictionary 对象所发现的任何错误。ModelStateDictionary 类是一个字典,用于跟踪模型对象状态的详细信息,重点关注验证错误。
  如下 ModelStateDictionary 成员:

名称描述
AddModelError(property, message)此方法用于记录指定属性的模型验证错误
GetValidationState(property)此方法用于确定特定属性是否存在模型验证错误,相应属性表示为ModelValidationState 枚举的值
IsValid如果所有模型属性都有效,该属性返回 true,否则返回 false
Clear()此属性清除验证状态

  Product 类的验证要求之一是确保用户为 Name 属性提供一个值,如果 Name 属性是 null 或空符串,那么使用 Modelstate.AddModelEmor 方法来注册一个证错误,指定属性的名称(Name)和显示给用户的消息。
  在模型绑定过程中,还使用 ModelStateDictionary 来记录查找和为模型属性赋值的任何问题GetValidationstate 方法用于査看模型属性是否存在任何错误记录,这些错误可能来自模型绑定过程,也可能是因为 AddModelEmor 方法在操作方法的显式验证期间调用。Getvalidationsiae 方从 ModelValidationState 枚举中返回一个值。
  ModelValidationState 值:

名称描述
Unvalidated未验证此值,说明没有对模型属性执行任何验证,这通常是因为请求中没有与属性名称对应的值
Valid此值表示与该属性关联的请求值有效
Invalic此值意味着与该属性关联的请求值无效,不应使用
Skipped此值说明没有处理模型属性,这通常意味着存在太多验证错误,没有必要继续执行验证检查

  在验证 Product对象中的所有属性之后,检査 ModelState.IsValid 属性,以查看是否存在错误。

2.1 向用户显示验证错误

  在点击提交按钮,标签助手会使用返回的验证错误来给 input 元素 class 属性添加。将值验证失败的元素添加到 input-validation-error 类中,然后可以对其进行解释,以向用户突出显示问题。

class="form-control input-validation-error"

  可以通过在样式表中定义定制的 CSS 样式来实现这一点,但是如果想使用诸如 Bootstrap 库提供的内置验证样式,则需要做一些额外的工作。
  给 Views/Shared 文件夹添加一个名为 _Validation.cshtml 的文件。

<script src="/lib/jquery/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("input.input-validation-error").addClass("is-invalid");
    });
</script>

  在 Views/Form 文件夹的 Form.cshtml文件中包含部分视图。

<partial name="_validation" />

  请求localhost:5000/controllers/Form。只有当表单与可以被模型浏览器解析的数据一起提交,并通过操作方法中的显式验证检查时,用户才会看到结果视图。在此之前,提交表单视图以突出显示的验证错误形式呈现。

2.2 显示验证消息

  标签助手应用于输入元素的 CSS 类表明,表单字段存在问题,但没有告诉用户问题是什么。向用户提供更多信息需要使用不同的标签助手,从而将问题摘要添加到视图中。

<div asp-validation-summary="All" class="text-danger"></div>

  ValidationSummaryTagHelper 类检测 div 元素上的 asp-validation-summary 特性,并通过添加描述已记录的任何验证错误的消息来响应。asp-validation-summary 特性的值来自 ValidationSummay枚举。

名称描述
All该值用于显示已记录的所有验证错误
ModelOnly该值用于仅显示整个模型的验证错误,不包括那些已经为单个属性记录的错误
None此值用于禁用标签助手,以便它不会转换 HTML 元素

2.3 显示属性级的验证消息

  尽管自定义错误消息比默认错误消息更有意义,但它仍然没有多大帮助,因为它不能清楚指出问题与哪个字段相关。对于这类错误,更有用的是在包含问题数据的 HTML 元素旁边显示验证错误消息。
  这可以使用 ValidationMessageTag 标签助手来完成,它査找具有 asp-validation-for 特性的 span 元素,该特性用于指定应该显示错误消息的属性。
  在Views/Form 文件夹的 Form.cshtml,为表单中的每个 input 元素添加了属性级验证消息元素。

<label asp-for="Name"></label>
<div><span asp-validation-for="Name" class="text-danger"></span></div>
<input class="form-control" asp-for="Name" />

3 使用元数据指定验证规则

  验证过程支持使用特性在模型类中直接表达模型验证规则,确保无论使用哪种操作方法处理请求,都将应用相同的验证规则集。

[Required]
[Display(Name = "Name")]
public string Name { get; set; }
[Column(TypeName = "decimal(8, 2)")]
[Required(ErrorMessage = "Please enter a price")]
[Range(1, 999999, ErrorMessage = "Please enter a positive price")]
public decimal Price { get; set; }

  在 Product 类上使用验证属性允许删除对 Name 和 Price 属性的显式验证检查。

[HttpPost]
public IActionResult SubmitForm(Product product)
{
    if (!context.Categories.Any(c => c.CategoryId == product.CategoryId))
    {
        ModelState.AddModelError(nameof(Product.CategoryId),
            "Enter an existing category ID");
    }
    if (!context.Suppliers.Any(s => s.SupplierId == product.SupplierId))
    {
        ModelState.AddModelError(nameof(Product.SupplierId),
            "Enter an existing supplier ID");
    }
    if (ModelState.IsValid)
    {
        TempData["name"] = product.Name;
        TempData["price"] = product.Price.ToString();
        TempData["categoryId"] = product.CategoryId.ToString();
        TempData["supplierId"] = product.SupplierId.ToString();
        return RedirectToAction(nameof(Results));
    }
    else
    {
        return View("Form");
    }
}

  验证属性是在调用操作方法之前应用的,这意味着在执行模型级验证时,仍然可以依赖模型状态来确定各个属性是否有效。要查看验证属性的作用,请求http:/localhost:5000/controllers/form,清除Name 和 Price 字段,并提交表单。响应将包括属性生成的验证错误。

创建自定义属性的验证属性
  可以通过创建扩展 ValidationAtribute 类的属性来扩展验证过程。创建 Validation 文件夹,并在其中添加了一个名为 PrimaryKeyAttribute.cs 的类文件。

public class PrimaryKeyAttribute : ValidationAttribute
{
    public Type ContextType { get; set; }
    public Type DataType { get; set; }
    protected override ValidationResult IsValid(object value,
            ValidationContext validationContext)
    {
        DbContext context = validationContext.GetService(ContextType) as DbContext;
        if (context.Find(DataType, value) == null)
        {
            return new ValidationResult(ErrorMessage
                ?? "Enter an existing key value");
        }
        else
        {
            return ValidationResult.Success;
        }
    }
}

  自定义属性重写了 IsValid 方法和 ValidationContext 对象,该方法通过要检査的值来调用 ValidationContext 对象提供关于验证过程的上下文,并通过 GetService 方法提供对应用程序服务的访问。
  在 IsValid 方法中,属性获得上下文类的一个实例,并使用它查询数据库,以确定该值是否用作主键值。
  在 Validation 文件夹中添加 PhraseAndPriceAtribute.cs。

public class PhraseAndPriceAttribute : ValidationAttribute
{
    public string Phrase { get; set; }
    public string Price { get; set; }
    protected override ValidationResult IsValid(object value,
        ValidationContext validationContext)
    {
        Product product = value as Product;
        if (product != null && product.Price > decimal.Parse(Price) &&
            product.Name.StartsWith(Phrase, StringComparison.OrdinalIgnoreCase))
        {
            return new ValidationResult(ErrorMessage
                ?? $"{Phrase} products cannot cost more than ${Price}");
        }
        return ValidationResult.Success;
    }
}

  该属性配置了 Phrase 和 Price 属性,这些属性在 IsValid 方法中用于检査模型对象的Name 和 Price 属性。属性级的自定义验证属性直接应用于它们验证的属性,模型级属性应用于整个类。

[PhraseAndPrice(Phrase = "Small", Price = "100")]
public class Product
[PrimaryKey(ContextType = typeof(DataContext), DataType = typeof(Category))]
public long CategoryId { get; set; }
[PrimaryKey(ContextType = typeof(DataContext), DataType = typeof(Category))]
public long SupplierId { get; set; }

  自定义属性允许从表单控制器的操作方法中删除其余的显式验证语句。验证属性会在调用操作方法之前自动应用,这意味着可以通过读取 ModelState.IsValid 属性来确定验证结果。

[HttpPost]
public IActionResult SubmitForm(Product product)
{
    if (ModelState.IsValid)
    {
        TempData["name"] = product.Name;
        TempData["price"] = product.Price.ToString();
        TempData["categoryId"] = product.CategoryId.ToString();
        TempData["supplierId"] = product.SupplierId.ToString();
        return RedirectToAction(nameof(Results));
    }
    else
    {
        return View("Form");
    }
}

4 执行客户端验证

  在 Web 应用程序中,用户通常希望立即得到验证反馈--而不必向服务器提交任何内容。这称为客户端验证,使用 JavaScript 实现。
  安装处理验证的 javascipt 包。打开一个新的PowerShel命令提示符。

libman install jquery-validate@1.19.1 -d wwwroot/lib/jquery-validate
1ibman install jqvery-validation-unobtrusivee3.2.11 -d wwroot/lib/jquery-validation-unobtrusive

  修改 Views/Shared 文件夹的 _Validation.cshtml。

<script src="/lib/jquery/jquery.min.js"></script>
<script src="~/lib/jquery-validate/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js">
</script>
<script type="text/javascript">
    $(document).ready(function () {
        $("input.input-validation-error").addClass("is-invalid");
    });
</script>

  Javascipt代码査找具有 data-val 属性的元素,并在用户提交表单时在浏览器中执行本地验画而不向服务器发送 HTTP请求。

<input class="form-control" asp-for="Name" data-val="true" data-val-required="name必填!"/>

5 执行远程验证

  远程验证的一个常见示例是检查应用程序中是否有可用的用户名,在此过程中,向服务器发送一个异步请求验证用户名。
  在 Controllers 文件夹中添加 ValidationController.cs。

[ApiController]
    [Route("api/[controller]")]
    public class ValidationController : ControllerBase
    {
        private DataContext dataContext;

        public ValidationController(DataContext context)
        {
            dataContext = context;
        }

        [HttpGet("categorykey")]
        public bool CategoryKey(string categoryId)
        {
            long keyVal;
            return long.TryParse(categoryId, out keyVal)
                && dataContext.Categories.Find(keyVal) != null;
        }

        [HttpGet("supplierkey")]
        public bool SupplierKey(string supplierId)
        {
            long keyVal;
            return long.TryParse(supplierId, out keyVal)
                && dataContext.Suppliers.Find(keyVal) != null;
        }
    }

  验证操作方法必须定义一个参数,该参数的名称与它们要验证的字段相匹配,这允许模型绑过程从请求查询字符串中提取要测试的值。操作方法的响应必须是JSON,并且只能为 true 或 false,以指示一个值是否可接受。操作方法接收候选值,并检查它们是否用作 Category 或 Supplier 对象的数据库键。
  为了使用远程验证方法,将 Remote 属性应用到 Product 类中的 Categoryld 和 Supplierld 属性。

[PrimaryKey(ContextType = typeof(DataContext), DataType = typeof(Category))]
[Remote("CategoryKey", "Validation", ErrorMessage = "Enter an existing key")]
public long CategoryId { get; set; }
[PrimaryKey(ContextType = typeof(DataContext), DataType = typeof(Category))]
[Remote("SupplierKey", "Validation", ErrorMessage = "Enter an existing key")]
public long SupplierId { get; set; }

  请求 http://localhost:5000/controllers/Form,在每次输入一个值后,都会验证输入元素的值。

ASP.NET Core MVC中使用SQL参数化防注入实战教程 MVC(Model-View-Controller)架构是一种软件设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理应用程序的业务逻辑和数据访问,视图负责展示用户界面,控制器则负责处理用户的输入并协调模型和视图之间的交互。这种分离使得应用程序的各个部分更加独立,便于开发和维护。 阅读详情

相关推荐

ASP.NET Core WebApi基于JWT实现接口授权验证

一、ASP.Net Core WebApi JWT课程前言 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给...

跟着阿笨一起玩NET 1562

ASP.NET Core 基础(十三)——模型绑定与模型验证

此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/model-binding?view=aspnetcore-5.0 1.模型绑定 作用: 从各种数据源(路由、表单、query string等)中检索数据。 通过方法的入参和公共属性向controller和razor page提供数据。 将字符串转为.net类型 更新复杂类型的属性 1.1 一个简单的模型绑.

catshitone的专栏 4380

RTL8211F千兆PHY原理图与PCB设计:从手册到量产的完整指南

在工业网关、边缘计算和FPGA/CPU以太网扩展设计中,千兆PHY芯片的稳定运行取决于外围电路的精细设计。RTL8211F(I)作为应用广泛的物理层收发器,其原理图设计涉及电源域划分、时钟与复位时序、RGMII/ MDIO接口匹配以及MDI差分网络等多个环节。正确理解数据手册的阅读顺序,掌握100Ω差分阻抗控制、等长约束和EMI布局技巧,是保证链路可靠性和信号完整性的关键。本文从芯片选型与数据手册解析切入,系统梳理从电源去耦到PCB布局布线的工程实践要点,帮助工程师规避Link不稳定、MDIO读取失败、吞吐

weixin_28721917的博客 348

.netcore模型校验

.netcore / c# 模型校验

qq_45602658的博客 801

VMware ubuntu虚拟机(或Centos7)与主机共享文件夹

系统环境 Windows 10 Vmware Workstation 15 Pro Ubuntu 20.04.1 LTS centos7 1.Ubuntu配置共享文件 1.1安装VMware-tools 更新最新VMware-tools组件 编辑->首选项->更新->立即下载所有组件 安装VMware-tools 虚拟机->安装VMware-tools 安装后ubuntu会加载一个虚拟光驱,解压文件,在解压的文件目录下执行以下命令进行安装 sudo vmware-instal

weixin_38924500的博客 2159

5QI(5G QoS Identifier)

此外,5QI与网络切片(Network Slicing)密切相关,网络切片允许网络运营商在物理网络内部创建虚拟网络,为不同的客户和用例提供定制化服务和QoS。5QI(5G QoS Identifier)在5G网络中用于标识不同的服务质量要求,它允许网络对不同的数据流进行优先级划分和资源分配。:5QI的实施需要对5G网络的QoS参数有深入的理解,包括延迟、吞吐量、数据包丢失率等,这对技术人员提出了较高的要求。不是所有的5G设备都支持5QI的全部功能,这可能会限制5QI应用的广泛性。

记录有价值的内容 6528

.Net Core WebApi 项目中进行模型验证

.Net Core 中怎么用模型验证

weixin_52783870的博客 914

《手把手教你修复过期K8s集群证书:记一次K8s集群起死回生实录》

今天本想打开半年前部署的K8s测试集群跑个Demo,结果`kubectl`直接报错`certificate has expired`!作为一名云原生老司机,我决定把这次'抢救'过程记录下来,手把手带大家解决这个运维常见问题。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3777

asp.net core的输入模型验证

楼主去做志愿者啦,最近才上班,荒废了将近一个月的时间,手和脑袋都退化了,今天跟大家一起学习下模型验证吧。

maaici的博客 3564

零基础DSP实战TMS320F28035:第九节,ADC比较器&EPWM

ADC比较器框图如下所示:-电压-----------------------------输出-电压A>电压B------------------ 1-电压A

sinat_30943509的博客 2534

OpenAI Error: 403 Country, region, or territory not supported [Python]

从OpenAI的API服务中获取数据时,由于你所在的国家、地区或领土不被支持,因此请求被拒绝了

suiusoar 5659

.net core数据模型验证,且返回数据保持接口格式的一致性

前言 今天在.net Core中使用数据模型验证时,数据验证不通过时,返回的数据结构格式与前端定义的不同,为了解决返回数据保持接口格式的一致性,故写此篇文章。软谋的.NET全套架构视频,...

zls365365的博客 962

假期搞定!2026国社科申报AI全攻略指南:从选题到创新,7大核心要点手把手教你!

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。你的任务是:用高度凝练的方式说明在(某一明确国家战略 / 政策方向,如:中国式现代化、共同富裕、基层治理现代化、数字中国、文化强国、国家安全等)背景下,我究竟要研究一个什么“具体而可操作的问题”。

智能AI让学术科研更容易 623

Asp.Net Core 实现登录验证身份的功能

步骤如下: 1.打开VS2019,新建ASP.NET Core Web应用程序,选择Web应用程序(模型视图控制器) 不用勾选右侧的身份认证,因为演示的是比较简单的,而勾选之后模板内容较为复杂 2、在Controller文件夹下AccountController,代码如下: using System; using System.Collections.Generi...

Stay Hungry 2万+

Jupyter notebook教程系列(二)Jupyter notebook的基本用法

Jupyter notebook的基本使用   一. 主页面 如图1-1 我们先介绍一下主页面上的内容: 1.Files页面是用于管理创建文件相关类目的。 2.Running页面主要展示的是当前正在运行当中的终端和“ipynb”格式的notebook。若想要关闭已经打开的终端和“ipynb”格式的notebook,仅仅关闭其页面是无法彻底退出程序的,需要在Running页面点击其对...

dlhlSC的博客 1438

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

谈谈ASP.NET Core 中的模型验证(自定义验证和远程验证)

在上篇文章中,我对ASP.NET CORE中的模型绑定进行介绍,现在就说明如何对模型进行验证 首先,ASP.NET CORE自带默认的模型绑定,还是看这个例子, ModelState.IsValid方法会对该模型中每个对象进行验证(是否为空,是格式是否正确),无效的对象则将在客户端提示错误信息,该错误信息由ModelState.AddModelError(string.Empty, error.D...

覃鸿宇的博客 2035

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

在 ASP.NET Core 中实现 Cookie 身份验证

如果您一直在使用 ASP.NET Core,那么您可能已经了解 ASP.NET Core Identity。ASP.NET Core Identity 是一个功能齐全的网站安全框架,它提供了许多特性,例如外部登录和 JSON Web Tokens (JWT) 支持。然而,有时您需要的是一种简单易用且能让您完全掌控数据存储和帐户管理等各个方面的解决方案。这时,ASP.NET Core 的 Cookie 身份验证就派上用场了。本文将介绍 Cookie 身份验证的概念以及如何配置它来保护您的网站。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如何 ASP.NET Core 中使用 WebSocket

摘要:本文详细介绍了在ASP.NET Core中实现WebSocket通讯的完整流程。文章首先阐述了WebSocket在实时应用中的优势,如聊天室、金融交易等场景。然后分三个阶段演示实现过程:1)服务器端配置WebSocket中间件和路由;2)客户端创建WebSocket连接;3)测试多个客户端连接。最后通过构建聊天室应用演示了多用户消息广播功能,包括用户加入/离开通知等特性。教程提供了完整的代码示例,帮助开发者快速掌握ASP.NET Core中WebSocket的实现方法。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1665

如何在ASP.Net Core中自动进行模型验证

当我们创建接受用户数据的应用程序时,我们必须先验证该数据,然后再将其存储在数据库中。 .Net Framework不仅提供验证属性以简化对所需输入,数据类型,值范围和模式(例如电子邮件地址和信用卡号)的检查,而且ASP.Net Core可以自动检查提交HTML表单值中的验证错误。 ASP.Net Core中的模型状态是名称-值对以及验证信息的集合,这些信息在POST请求期间发送到服务器。 ...

cxu0262的博客 1162

ASP.NET Core模型状态:验证状态管理

在Web应用开发中,数据验证是保证应用健壮性和安全性的关键环节。ASP.NET Core提供了强大的模型状态(Model State)管理系统,它不仅能够处理数据绑定过程中的验证错误,还能有效管理验证状态,为开发者提供清晰的验证结果反馈。本文将深入探讨ASP.NET Core模型状态的验证状态管理机制,帮助您构建更加健壮的Web应用。 ## 模型状态基础概念 ### ModelStateDic...

gitblog_00448的博客 816

ASP.NET CORE 简介

<h1 id="aspnet-core-简介">ASP.NET CORE 简介</h1> <p>ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应

yuyue59451222222的博客 2362

ASP.NET Core验证结果:验证错误收集

在Web应用开发中,数据验证是确保应用健壮性和安全性的关键环节。ASP.NET Core提供了强大的验证框架,其中`ModelStateDictionary`作为验证结果的核心容器,负责收集和管理所有验证错误信息。本文将深入探讨ASP.NET Core验证错误的收集机制、核心API使用、最佳实践以及高级应用场景。 ## 验证错误收集的核心机制 ### ModelStateDictionary架...

gitblog_01012的博客 739

ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序

本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识。 本教程基于 VS2019和 .NET Core 2.2。 2019-6-9:VS2017因为存在BUG,不能安装 .NET Core 2.2,对此教程影响不大 本教程使用控制器和视图教授ASP .N...

个人博客 1130

ASP.NET Core WebApi中使用FluentValidation验证数据模型

原文链接:Common features in ASP.NET Core 2.1 WebApi: Validation 作者:Anthony Giretti 译者:Lamond Lu 介绍 验证用户输入是一个Web应用中的基本功能。对于生产系统,开发人员通常需要花费大量时间,编写大量的代码来完成这一功能。如果我们使用FluentValidation构建ASP.NET Core Web API...

Lamond Lu的博客 1715

使用 ASP.NET Core 进行现代全栈 Web 开发: 12 Vue.js 与 ASP.NET Core 集成

将 Vue.js 与 ASP.NET Core 集成是构建全栈应用的绝佳选择,前端可充分发挥 Vue.js 的响应式特性,而后端则采用 ASP.NET Core 这种可扩展的高性能技术。本节将配置一个 ASP.NET Core 的后端应用,将其集成以服务 Vue 应用,创建调用后端端点的 Vue 组件,并配置 Vue.js 中的路由功能。此外,您可以尝试对这些组件应用 UI 修改,并创建新的 类似端点,来体验 Vue 与 ASP.NET Core Web API 项目之间的集成。

967

ASP.NET Core Web应用程序项目部署流程

基于Windows服务器环境下进行ASP.NET core Web应用程序部署处理。

LZD_jay的专栏 3564
上一篇: ASP.NET Core应用程序11:使用模型绑定
下一篇: ASP.NET Core应用程序13:使用过滤器
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值