ASP.NET Core – Web API 冷知识
Under/Over Posting
参考:
.NET Core WebApi Action is executed even with missing properties in the request body
Model Validation in ASP.NET Web API (找 under-posting)
Model validation in ASP.NET Core MVC and Razor Pages
Input Validation vs. Model Validation in ASP.NET MVC
什么是 under/over-posting?
假设一个 Post 请求需要一个 ProductDTO, 里面有 Name, Price 2 个属性
public class ProductDTO
{
public string Name { get; set; } = "";
public decimal Price { get; set; }
}
Client 在发请求时, 给了一个空对象. 这种情况就叫 under-posting (给的 property 不够), 如果给了一些额外的 property 那就叫 over-posting (给多了)
默认情况下, ASP.NET Core 遇到 under-posting, 它会给 default value. 跟 new Class() 一样.
当遇到 over-posting 的时候, 多的 property 会被 ignore, 最后的 instance 自然不会有多余的 property.
Ignore over-posting 通常是 ok 的, 但是 default value for under-posting 有时候会反直觉.
比如有一个必填的 enum, 我们会想加一个 [Required] or NotEmpty(), 但是由于有 default value 机制. 它会自动填入 enum first value.
以至于, [Required] 肯定通过, 而 NotEmpty() 则不允许是 default value (意味着用户即便真的想选 enum first value 也会被误以为是 default value)
所以最终就是根本不需要写 required validation 就对了. int = 0, bool = false 也是同样的情况.
如果不希望这种情况诞生, ASP.NET Core 给出的 idea 是 set the property to nullable, 这样就不会有 default value 了.

当然 nullable 对后续的调用是否友好是另一个问题. 我个人比较喜欢 default value + 不写 required validation 机制的.
因为 under-posting 本来就是 front-end mistake 引发的问题 (没有读 API 文档吗? 那还要我写?). under-posting 并不会导致 hacking 问题. 因为 default value 是否可以过 (比如 int = 0)
会有其它的 validation 去验证, 比如 int value > 0 之类的.
ASP.NET Core – Web API 冷知识的更多相关文章
- 在Mac下创建ASP.NET Core Web API
		在Mac下创建ASP.NET Core Web API 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉 ... 
- ASP.NET Core Web API 索引 (更新Identity Server 4 视频教程)
		GraphQL 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上) 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下) [视频] 使用ASP.NET C ... 
- ASP.NET Core Web API 集成测试
		本文需要您了解ASP.NET Core Web API 和 xUnit的相关知识. 这里有xUnit的介绍: https://www.cnblogs.com/cgzl/p/9178672.html#t ... 
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
		Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ... 
- ASP.NET Core Web API 跨域(CORS) Cookie问题
		身为一个Web API,处理来自跨域不同源的请求,是一件十分合理的事情. 先上已有的文章,快速复制粘贴,启用CORS: Microsoft:启用 ASP.NET Core 中的跨域请求 (CORS) ... 
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
		对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ... 
- 在ASP.NET Core Web API上使用Swagger提供API文档
		我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ... 
- Docker容器环境下ASP.NET Core Web API应用程序的调试
		本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ... 
- 在docker中运行ASP.NET Core Web API应用程序
		本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ... 
- ASP.NET Core Web API Cassandra CRUD 操作
		在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ... 
随机推荐
- 计算复杂性学习笔记(TCS笔记)
			感觉最近太摆了,每天很空虚,不愿意搞应试那一套,还是得学点东西.还是准备一边学tcs一边搞搞oi好打icpc,搞这个纯属兴趣,也是填个坑.最近进了一个初中生建的数学交流群,感觉群里初中生也很厉害,开始 ... 
- 彻底搞懂python super函数的作用
			super() 的入门使用 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了. 调用父类同名方法有两种方式: 1.调 ... 
- RHCA cl210 015  实例启动 超融合 热迁移 网络underlay
			lab computeresources-hci setup 实例启动流程 keystone不仅做认证,且有所有组键地址 nova-conductor解耦,不允许nova-compute直接访问dat ... 
- hive测试数据洗刷
			hive测试--HIVE数据分析 测试使用虚拟机中的hive 环境:虚拟机+jdk+hadoop+hive+mysql 题目: 1.数据导入: 要求将样表文件中的(sales_sample_20 ... 
- Python和RPA网页自动化-让非标准下拉框选择指定文本的方法
			以下方"节点审批"下拉框为例 该下拉框没有<select>标签,而是<div><ul><li>标签.分别使用Python和RPA网页 ... 
- CentOS安装RustDesk自建服务器
			一.安装node.js 1.下载并解压 [root@VM-8-2-centos src]# cd /usr/local # 下载node文件 [root@VM-8-2-centos local]# w ... 
- 【Java】使用Druid连接池的监控面板排查慢SQL
			默认在后台服务的地址: http://localhost:8078/druid/login.html 账号信息放在配置文件中获取: server: port: 8078 spring: datasou ... 
- 【Ubuntu】下载安装 12.04.5版本 桌面端
			下载 Download 我擦早上起来才发现自己装的是远古版本了,唉算了,反正也没见过,就当是学个东西把 [下载地址:点我访问] https://releases.ubuntu.com/?_ga=2.2 ... 
- 【Layui】02 图标 Icon
			官网下载地址: https://www.layui.com/ 学习参考: https://www.bilibili.com/video/BV1ct411n7SN [Layui的文件结构] 我们只需要这 ... 
- 从.net开发做到云原生运维(四)——.net core的微服务开发
			1. .net 6.0项目模板变更 在.net 5和.net 3.1的时候,asp.net core项目模板里有个Program类和Startup类,在.net 6中引入了一个最小api的项目模板,在 ... 
