我在表单上使用Google ReCaptcha元素。 ReCaptcha为名为g-recaptcha-response
的POSTed参数添加一个参数,控制器需要检索该参数。由于此参数名称不是合法的C#变量名称,因此检索其值的唯一方法似乎是通过Request.Params["g-recaptcha-response"]
(而不是通过模型绑定到视图模型中的属性)。
现在,我的问题是在POSTed参数的其他地方我有几个可能包含HTML标记的表单字段。我在视图模型中使用[AllowHtml]
注释了相关属性,如果用户在表单中输入HTML标记,则会阻止模型绑定器抛出HttpRequestValidationException
。但[AllowHtml]
显然仅适用于模型绑定器。如果用户在表单中输入了HTML标记,那么当我引用HttpRequestValidationException
以获取ReCaptcha响应时,我会收到Request.Params
。
尽管我可以说,我仍然可以在选定的POST参数中允许HTML标记的同时获取ReCaptcha响应的唯一方法是使用编写自定义模型绑定器(例如https://stackoverflow.com/a/4316327/1637105)的痛苦允许我将视图模型中的属性绑定到别名(在我的例子中,属性名称不是有效的C#变量名称)。
这个问题的关键在于确认我确实需要去实现自定义模型绑定器的痛苦。
非常欢迎任何建议或替代解决方案!
编辑:
我发现另一个解决方案是找出一种从POSTed参数中获取值的方法,而不会触发(或处理时)HttpRequestValidationException。
答案 0 :(得分:1)
您可以使用Unvalidated
的{{1}}属性来访问值,而不会触发请求验证。例如
Request