gpt4 book ai didi

model-view-controller - 我不明白 MVC 中的 [Bind(Exclude ="ID")]

转载 作者:行者123 更新时间:2023-12-01 11:52:55 24 4
gpt4 key购买 nike

我真的很困惑......仍然。

我之前问过一个类似的问题,但现在我会问得更简单。

我在很多示例和教程中都看到了这一点。您如何将 [Bind(Exclude="ID")] 放在整个模型上,并期望对模型进行编辑?如果您在 POST 中打包了模型的所有属性但没有打包 ID,那么您如何知道要编辑哪个 ID?

即使我正在使用 ViewModels...我也可能在没有 ID 的情况下创建它们。那么在那种情况下……还有……我怎么知道哪个 ID 在编辑时更新了?

是的,我知道这有一个“安全”因素。人们可以劫持 ID...所以我们需要防止人们在 POST 期间更新值。但是......那么处理编辑的正确方法是什么?通常的做法是什么?

我觉得我错过了一些非常微不足道的东西。

最佳答案

在 MVC 中,当客户端发出请求时,请求由模型绑定(bind)器处理。如果你在你的 Controller 上包含模型,那么据我所知,你实际上必须通过在你的参数前加上模型名称来指定你希望绑定(bind)的模型(除非你只有一个参数是模型)

SomeModel_ID

现在,在某些情况下,您可能希望将某些属性排除在外,因为它们会带来安全风险,您似乎对此概念很满意。我们将排除模型上的 ID,防止任何客户端请求以纯文本形式发布此值。

现在为什么我们要排除整个模型?好吧,并非所有 Controller 参数都由模型绑定(bind)器进行预处理。例如,RedirectToAction 不通过模型绑定(bind)器传递,因此在这种情况下,您可以在 POST Controller 操作中创建一个新模型,然后重定向到 GET Controller 操作,传递经过清理的模型。该模型不能由客户端填充,但我们可以在服务器端自行填充它。

我绑定(bind)到模型的唯一一次是当我有一个 View 模型和该模型的关联编辑器时。这使得将通用编辑器注入(inject)页面并封装这些属性变得非常容易。如果您必须排除某些属性的绑定(bind),我认为您做错了。

更新

根据您的评论,我想我明白了您可能会感到困惑的原因。模型绑定(bind)排除器阻止客户端设置模型属性。如果您需要此属性来进行更新,那么您根本无法排除它。这意味着用户可能会回发任何 ID。在这种情况下,您应该检查用户是否有权在提供请求的更新之前修改与此 ID 关联的任何对象或数据库记录。 验证参数是一个手动过程。您可以使用数据注释来验证输入,但这不太可能对访问权限有很大帮助。这是您应该在某个阶段手动检查的内容。

关于model-view-controller - 我不明白 MVC 中的 [Bind(Exclude ="ID")],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com