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 冷知识的更多相关文章

  1. 在Mac下创建ASP.NET Core Web API

    在Mac下创建ASP.NET Core Web API 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉 ...

  2. ASP.NET Core Web API 索引 (更新Identity Server 4 视频教程)

    GraphQL 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上) 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下) [视频] 使用ASP.NET C ...

  3. ASP.NET Core Web API 集成测试

    本文需要您了解ASP.NET Core Web API 和 xUnit的相关知识. 这里有xUnit的介绍: https://www.cnblogs.com/cgzl/p/9178672.html#t ...

  4. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...

  5. ASP.NET Core Web API 跨域(CORS) Cookie问题

    身为一个Web API,处理来自跨域不同源的请求,是一件十分合理的事情. 先上已有的文章,快速复制粘贴,启用CORS: Microsoft:启用 ASP.NET Core 中的跨域请求 (CORS) ...

  6. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  7. 在ASP.NET Core Web API上使用Swagger提供API文档

    我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...

  8. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  9. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  10. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

随机推荐

  1. apache ab.exe压力测试

    ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便     下载地址:http://files.cnblogs.com/files/gossip/ab.zip ...

  2. 统计里面PV 和 UV代表什么意思

    1.网站流量bai统计中"PV"它所代表的意思是访问量了,具体指的du就是网站zhi的页面点击量或是浏览量,亦或是页面的刷新量dao了,网站的页面每刷新一次,就统计一个" ...

  3. C# WinForm遍历窗体控件的3种方法

    1.循环遍历 private void GetControls(Control fatherControl) { Control.ControlCollection sonControls = fat ...

  4. Java maven反应堆构建学习实践

    Java maven反应堆构建学习实践 实践环境 Apache Maven 3.0.5 (Red Hat 3.0.5-17) 应用示例 示例项目结构 maven示例项目组织结构如下 maven-stu ...

  5. java17特性:文本块

    例子 String content= """ { "text_1":"%s", "text_2":" ...

  6. elasticsearch初步使用学习

    通过使用elasticsearch,我们可以加快搜索时间(直接使用SQL的模糊查询搜索耗时会比较久,而且elasticsearch的响应耗时与数据量关系不大) es主要用于存储,计算,搜索数据 依次部 ...

  7. 简单写写IO流里的一些高级流

    缓冲流Buffered:缓冲流是一种高级的流,他可以对file类的流进行包装,内部含有一种缓冲池,可以在一定程度上提高IO的读写效率 不过,按实验来看,只要给低级流和缓冲流相似的byte读写,其实两者 ...

  8. SSL/TLS 深入浅出

    SSL,https(HTTP over SSL), X.509, SSL 证书 ,证书申请 /导入/签发, 等名词,想必有一定工作经验的小伙伴,一定都会略有耳闻,或者至少也听神边大神念叨过.虽然司空见 ...

  9. linux中grep的用法详解

    linux中grep的用法详解 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是 ...

  10. 【Ubuntu】下载安装 12.04.5版本 桌面端

    下载 Download 我擦早上起来才发现自己装的是远古版本了,唉算了,反正也没见过,就当是学个东西把 [下载地址:点我访问] https://releases.ubuntu.com/?_ga=2.2 ...