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. iOS开发基础102-后台保活方案

    iOS系统在后台执行程序时,有严格的限制,为了更好地管理资源和电池寿命,iOS会限制应用程序在后台的运行时间.然而,iOS提供了一些特定的策略和技术,使得应用程序可以在特定场景下保持后台运行(即&qu ...

  2. AT_arc041_b 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定一个 \(N \times M\) 的矩阵,此矩阵的每一个元素都向上.下.左.右 ...

  3. C# 算术表达式求值(后缀法),看这一篇就够了

    一.种类介绍 算术表达式有三种:前缀表达式.中缀表达式和后缀表达式.一般用的是中缀,比如1+1,前后缀就是把操作符移到前面和后面,下面简单介绍一下这三种表达式. 1.前缀表示法 前缀表示法又叫波兰表示 ...

  4. SQL Server 查询分析及优化方法

    一.影响速度的因素 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) I/O吞吐量小,形成了瓶颈效应 没有创建计算列导致查询不优化 内存不足 网络速度慢 查询出的数据量过大(可以采 ...

  5. Python 按分类权重(区间)随机获取分类样本

    按分类权重(区间)随机获取分类样本 By:授客 QQ:1033553122 开发环境 win 10 python 3.6.5 需求 活动抽奖,参与抽奖产品有iphone, 华为,小米,魅族,vivo, ...

  6. PixiJS源码分析系列:第三章 使用 canvas 作为渲染器

    使用 canvasRenderer 渲染 上一章分析了一下 Sprite 在默认 webgl 渲染器上的渲染,这章让我们把目光聚集到 canvasRenderer 上 使用 canvas 渲染器渲染图 ...

  7. RPA京麦咚咚批量发送消息

    京麦咚咚发送消息,首先我们需要确定给谁发,发送什么内容 给谁发:可以传入京东用户名.京东订单号.咚咚将通过此条件进行搜索进入会话框 发送什么内容:批量发送信息给不同的用户,比如给不同的订单用户发送其相 ...

  8. 【Layui】07 徽章 Badge

    文档地址: https://www.layui.com/demo/badge.html 圆点徽章: <span class="layui-badge-dot">< ...

  9. tensorflow的官方强化学习库agents的相关内容及一些注意事项

    源代码地址: https://github.com/tensorflow/agents TensorFlow给出的官方文档说明: https://tensorflow.google.cn/agents ...

  10. 为了给Javaer落地DDD,我们不得不写开源组件

    本文上回书接<这是DDD建模最难的部分(其实很简单)>,欢迎关注我的同名公众号. https://mp.weixin.qq.com/s/HZKMLF0_I10iczzp2mAR-w   故 ...