问题标签 [custom-model-binder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3338 浏览

c# - 如何在请求验证进入 MVC 4 之前清理输入?

我有我的应用程序,安全测试团队报告了一个关于用户可能从我们的表单输入中注入恶意代码的错误。该应用程序是在 ASP.NET MVC4、.NET 4.5 和 EF 5 中开发的。

正在测试的攻击就像输入任何通常的 html 一样,但我的同事没有使用常规的 < 或 >,而是使用 < 和 >(之前字符的全角 unicode 版本:此处为完整列表)。MVC 让这些字符通过,然后,以某种方式,ORM 删除了字符的“宽”部分,并将标准和普通字符留在数据库中。不用说,如果在视图的输出中没有正确编码,这些字符的检索和渲染可能会导致 XSS 漏洞。

我现在需要的是一种对应用程序中以任何形式提交的所有字符串进行清理和执行 Normalize() 的方法。有人告诉我创建一个自定义模型绑定器,但是在 BindModel 方法中我找不到修改字段的位置,所以稍后框架可以识别清理后的值并识别注入。

任何建议将不胜感激。

0 投票
1 回答
21150 浏览

c# - MVC 日期时间模型绑定

我在我的应用程序中使用了 2 个剑道日期选择器:

单击该按钮时,我会读取这些日期选择器客户端的值并向 API 控制器发出 POST。

我遇到的问题是有时 DateTime 参数解析不正确,我使用的是 en-GB 文化(在我的 web.config 中指定),但是给定日期为 2014 年 1 月 3 日(3 月 1 日),当值为由模型绑定器处理,它被解释为 03/01/2014(1 月 3 日)。

我的javascript如下:

我的模型如下:

我认为解决方案是我需要一个自定义模型绑定器来解析日期时间值,所以我创建了(如下)并将其注册到 Global.asax.cs 文件中,但这不起作用,绑定器从未被调用,我我不确定这是否是因为日期时间是自定义对象的属性。

并注册如下:

有谁知道我哪里出错了?

0 投票
3 回答
1175 浏览

asp.net-mvc-4 - MVC:如何使用数据库来驱动验证属性或替代方案?

总之,我正在尝试基于数据库字段在运行时创建特定于实例的数据注释属性。我现在所拥有的可以很好地创建初始模型,但是当模型被回发并且服务器验证发生时就会失败。

(我在视图模型中的集合中使用了相同的输入模型,但是必须对集合中的每个实例应用不同的验证......例如,输入的第一次出现可能被限制在 1-100 的范围内但在同一输入页面上提示的同一模型的下一次出现将是 1000-2000 的范围。另一个可能是日期,或者必须是 6 个字符长的字符串......)

我将解释我做了什么以及我的问题在哪里:

我继承DataAnnotationsModelMetadataProvider并提供了我自己的实现GetMetadataForProperty(这与验证问题没有任何关系......但是)

我继承DataAnnotationsModelValidatorProvider并提供了GetValidators. 我在这里要做的是根据我的数据库记录创建新属性,然后将这些属性传递给基本实现,以便相应地创建验证器。

但是...... GetValidators在 PROPERTY 级别调用......当使用我想要应用验证器的属性名调用它时,我需要找到该属性名的适用数据库记录,以便找出哪些属性我需要创建....但是...我无法仅从值字段的属性名中获取数据库记录的键......事实上,数据库键在父模型中......那我要怎么把握呢?!

我尝试使用静态变量(YUK)并在调用一个属性期间存储密钥,并在另一次调用我的值字段属性期间检索它......但是因为模型是单向序列化的,反序列化是相反的最终我的密钥与我所需的属性不同步。

为了增加一点复杂性,我还使用了自定义模型绑定器。我已经按照此处其他地方的建议覆盖了 CreateModel ,但是我找不到将元数据或附加值附加到我的输出模型的属性的方法....仅适用于模型本身....但是我该怎么做GetValidators 中的 MODEL 元数据/附加值需要一个 PROPERTY 吗?

所以......我的问题是双重的......

1) 谁能帮我从我的自定义模型绑定器中获取我的数据库密钥到我的 ValidationProvider 上的 GetValidators 方法?或者也许使用我的自定义元数据提供程序?

2) 是否有一种不同的、更简单的方法可以在运行时根据数据库记录创建验证器?

0 投票
0 回答
1037 浏览

asp.net - 带有 html 内容的 ASP.NET MVC5 自定义 json 模型绑定器

我使用了 FromJsonAttribute (由Steve Sanderson创建),它非常棒,但遗憾的是它没有关注 AllowHtml 属性。我有以下模型:

在我的控制器中,我以这种方式接收数据:

FromJson 属性如下所示:

我的问题是我无法在 AllowHtml 属性所在的地方传递 html 内容。非常感谢!

0 投票
1 回答
44 浏览

asp.net-mvc-4 - 将可观察数组与模型一起传输到控制器

我想将可观察数组与模型一起传输到控制器。我进行了冲浪,发现自定义模型绑定对我的情况有好处。
但是再次给定我可以使用 controllerContext.HttpContext.Form.Get("Day"); 一天就是一天

我已经使用了 select 并且 select 的元素存储为 observable 数组....如果我不能使用数组,我可以使用 select name 或 id 作为上述情况...我该怎么做...因为 select 有很多选项...

而且我是自定义模型绑定的新手,所以我很困惑我必须将哪些代码放在哪里......我应该将自定义绑定代码与 IModelBinder 接口放在哪里

0 投票
1 回答
1624 浏览

c# - 在 Web API 中创建属性模型绑定器

我为一个复杂的类创建了 ModelBinder。我想在一个属性上重用这个 ModelBinder。那么是否可以在 Web API 中的属性上使用 ModelBinder。我正在寻找一个示例实现,它提供类似于 MVC 中的属性绑定器。下面是我遇到的参考链接,但这些实现是针对 MVC 的。任何帮助表示赞赏。

参考链接1

参考链接 2

0 投票
1 回答
299 浏览

c# - 自定义模型绑定器中具有相同名称的两个字段

我编写了一个自定义模型活页夹。在我的页面中,我有一个带有逗号分隔符掩码的数字文本框。例如:

1,234

在我的模型活页夹中,我在文本框中获得了价值:

var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName)

并从中删除“,”:

一切都很好,直到在另一个页面中我有两个同名的字段。当我提交表单时,一个字段的值为“0”,一个字段的值为另一个值(例如“1”)。然后,当我从以下位置获取 valueResult 时:

它返回我:“1,0”,然后当我从中删除“,”时,它将是“10”。

但是在默认的 mvc 模型绑定器中,当我有两个同名的字段时,它会获取第一个字段的值。

如何执行默认 mvc 模型绑定器之类的操作?

谢谢。

0 投票
2 回答
984 浏览

c# - 动作参数是否有默认值?

如何在 ASP.NET MVC 的自定义 ModelBinder 中找出我是否绑定到具有默认值的参数?

默认值:

无默认值:

模型绑定器:

我想知道这一点,因为如果用户对某个操作发出请求并且没有提供所有必要的信息(这将是所有没有默认值的参数),我想显示一条错误消息。

0 投票
2 回答
3059 浏览

c# - 使用自定义模型绑定时未将对象引用设置为对象的实例

我正在尝试使用自定义模型绑定器将记录添加到我的数据库中

当我尝试提交我的记录时,我得到 Object reference not set to an instance of an object error on this line

我不确定它为什么会导致此错误。

这是我在 Global.asax.cs 中设置模型绑定器的方法

我的存储库

和我的控制器动作

这是我正在使用的工厂:

0 投票
1 回答
1703 浏览

c# - 实体对象不能被多个 IEntityChangeTracker 实例引用错误

我知道这个问题有很多重复,但我找不到适合我的情况的问题。

所以我正在使用 ASP.NET MVC 4 + Entity Framework + Ninject 使用存储库模式(我看到很多提到存储库 + 工作单元模式?这可能是我的问题的潜在解决方案,但我不知道如何实现它)。

当我尝试添加新帖子时,在以下代码行中出现“一个实体对象不能被多个 IEntityChangeTracker 实例引用”错误

这是我的完整实现:

具体仓库

界面

我的控制器

我认为以上任何一个都不是问题的根源,我认为问题出在我的自定义模型绑定器中

和我的 global.asax.cs

这是我的 Ninject 依赖解析器