如何不将属性与 JSON 数据绑定

2023-12-21

这是我的模型:

public sealed class UserModel
{
    [Key]
    [Required]
    [StringLength(20, MinimumLength = 4)]
    public string Username { get; set; }

    [Required]
    [EmailAddress]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [StringLength(20, MinimumLength = 4)]
    public string Password { get; set; }

    public bool IsValid { get; set; }
}

Username, Email, and Password然而由用户提供IsValid只能由服务器修改,换句话说,如果用户提供true服务器应该返回BAD REQUEST或者不考虑这个值。

所以,我可以将属性设置为false关于模型创建,但它并不干净。 有没有办法将财产私有化或“仅服务器"?

[2018-04-01]:我找到了一个好文章 https://andrewlock.net/preventing-mass-assignment-or-over-posting-in-asp-net-core/ where [BindNever]已使用,遗憾的是它不适用于传入的数据[FromBody]正如所指出的。所以目前我只是将属性设置为false我自己在 POST 处理程序中,但它非常丑陋,因此我仍在寻找其他方法来做到这一点!

[2018-04-02]:终于找到了 !看一下这个 ! https://stackoverflow.com/a/49610576/6331372


创建用户将直接在视图中与之交互的视图模型。尽量不要直接在视图中使用模型,因为这基本上是一种泄漏设计。

public class UserViewModel {
    [Required]
    [StringLength(20, MinimumLength = 4)]
    public string Username { get; set; }

    [Required]
    [EmailAddress]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [StringLength(20, MinimumLength = 4)]
    public string Password { get; set; }
}

在服务器端,持久数据时属性将被复制到模型中。需要设置的任何其他属性都可以安全地在服务器上完成,因为模型不会泄露给客户端。

例如

public ActionResult Post([FromBody] UserViewModel viewModel) {
    if(ModelState.IsValid) {
        //create new model
        var model = new UserModel {
            Username = viewModel.Username,
            Email = viewModel.Email,
            Password = viewModel.Password
        };

        //or model retrieved from data storage

        //...some other code...

        model.IsValid = true; //only the server can modify this value

        //...
    }

    //...
}

客户端甚至不应该知道IsValid属性(如果不应该与之交互)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何不将属性与 JSON 数据绑定 的相关文章

随机推荐

  • Groovy 中的 Jenkins 阶段是什么?

    我试图弄清楚 Groovy 语法中的阶段是什么 该语法是什么 stage stage 1 statement 1 statement 2 statement n stage stage 2 statement 1 statement 2 s
  • 尝试升级到 Swift 1.2 时出现令人困惑的编译错误

    我已经能够更新 XCode 6 3 和 Swift 1 2 的代码 没有太大问题 直到我尝试修复 UIHandler 中覆盖的触摸输入功能 我将所有四个触摸功能的签名更新为以下内容 override func touchesBegan to
  • 如何在库中支持多个 Scala 版本

    我有一个相当正常的斯卡拉项目 https github com FasterXML jackson module scala 目前正在使用 Maven 构建 我想同时支持 Scala 2 9 x 和即将推出的 2 10 后者不兼容二进制或源
  • Angular 2 Ionic 2 - 如何将日期输入的最大或最小日期设置为今天?

  • Jquery 检查元素在视口中是否可见[重复]

    这个问题在这里已经有答案了 检查 div 类 media 是否位于浏览器视觉视口内的函数 无论窗口滚动位置如何 div class main div class media div div 尝试使用这个插件https github com
  • Scikit Learn 中的多变量/多元线性回归?

    我的 csv 文件中有一个数据集 数据 Train csv 和数据 Test csv 格式如下 Temperature K Pressure ATM CompressibilityFactor Z 273 1 24 675 0 806677
  • 实时图像处理(OCR)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我打算开发一个像这样的应用程序字镜头 https itunes apple com in app wor
  • 保持窗口看起来活跃

    我正在为辅助监视器开发任务栏 我让它运行得相当好 我还可以使用空气动力学模糊外观 但我的问题可能与航空方面的东西无关 我想要做的是让我的任务栏窗口始终显示为焦点 激活状态 它不需要真正聚焦或激活 我只是希望它看起来像那样 您只需在应用程序空
  • 类型“CFStringRef”不符合 Xcode 6.1 中的协议“Hashable”

    在我的应用程序中 我有一个在 Xcode 6 中工作的钥匙串访问类 但现在在 Xcode 6 1 中我收到一些错误 这是第一个错误 类型 CFStringRef 不符合协议 Hashable private class func updat
  • Solr Atomic Update - 使用已索引但未存储的字段更新文档

    我有一个核心 其中包含一些已索引但未存储的字段的文档 我们将其称为 A 组字段 当我更新其他字段 已索引和存储 我们将其称为 B 组字段 时 A 组字段的内容会丢失 在此 Solr 文档中 更新部分文档 https cwiki apache
  • JMeter - 如何在 IF 控制器中使用多个条件?

    这是我的代码 In If Controller gt Condition Default Javascript I am providing following responsecode 404 responsecode 500 respo
  • 检测我的应用程序是否被卸载

    是否可以有一个代码来检测我的应用程序是否已被卸载 并且卸载后 我的应用程序创建的所有相关文件夹将被自动删除 Thanks 至于能够检测卸载 恐怕是不可能的 每当应用程序包被删除 App is Uninstalled 时 ACTION PAC
  • 什么语言或方法允许图形和音乐演示适合 64kb EXE?

    怎么可能在一个64kb编译后的exe 这些程序可以生成如此疯狂的视觉效果 并配有匹配的音乐 一个例子 Ars Nova 由 幻影领主 http www scene org file php id 581018 演示运行的 YouTube 视
  • QueryDSL 生成的类无法访问第二级元素进行查询

    我在 Java 项目中使用 QueryDSL 和 Spring Data JPA 并使用 QueryDSL maven 插件生成文件来使用它生成的 QueryDSL 模型类 当我将它用于一级嵌套对象时 这非常有用 但是如果我尝试访问第二级访
  • 如何使用powershell获取所有证书?

    我正在尝试使用 powershell 获取所有证书 当我将 computer My 设置为下面的存储位置时 脚本会返回我认为的用户证书 当我设置 computer root 时 它返回根证书 如何同时获得用户证书和机器证书 computer
  • Spring Tool Suite(STS版本3.6.1)没有创建Roo项目的选项

    STS 3 6 1 中似乎没有创建 Roo 应用程序的选项 在谷歌搜索时我注意到this https stackoverflow com questions 23365784 how to add spring roo on spring
  • 建议的基于 Hadoop 的设计/组件用于定期 REST API 调用的摄取

    我们计划使用 REST API 调用从端点提取数据并将数据存储到 HDFS REST 调用以定期方式 每天或每小时 完成 我已经使用 Flume 完成了 Twitter 摄取 但我认为使用 Flume 不适合我当前的用例 因为我没有使用像
  • OutputCache 使用 PostBack 返回无效版本

    我在输出缓存方面遇到了一个奇怪的问题 我在一个页面上有多个用户控件 其中一个是登录控件 页面和登录控件不会被缓存 但其他用户控件会使用 VaryByParam 进行缓存 现在 当我点击不同的页面时 所有这些都与缓存一起工作 但一旦我登录 该
  • C#:爬虫项目

    我可以很容易地遵循以下代码示例吗 使用浏览器控件向目标网站发起请求 捕获来自目标网站的响应 将响应转换为 DOM 对象 迭代 DOM 对象并捕获 FirstName LastName 等内容 如果它们是响应的一部分 thanks 以下代码使
  • 如何不将属性与 JSON 数据绑定

    这是我的模型 public sealed class UserModel Key Required StringLength 20 MinimumLength 4 public string Username get set Require