我在表单上使用Google ReCaptcha元素。 ReCaptcha向控制器需要检索的名为g-recaptcha-response
的已发布参数添加一个参数。由于此参数名称不是合法的C#变量名称,似乎检索其值的唯一方法是通过Request.Params["g-recaptcha-response"]
(而不是通过模型绑定视图模型中的属性)。绑定到不是合法的C#变量名称的名称
现在,我的问题是,在POSTed参数的其他地方我有几个表单域可能包含HTML标记。我已使用[AllowHtml]
注解了我的视图模型中的关联属性,如果用户将HTML标记输入到表单中,则可防止模型联编程序抛出HttpRequestValidationException
。但[AllowHtml]
显然只适用于模型绑定器。如果用户在表单中输入了HTML标记,那么当我参考Request.Params
来获取ReCaptcha响应时,我会得到一个HttpRequestValidationException
。
就我所知,唯一可以获取ReCaptcha响应,同时仍允许在选定的POST参数中使用HTML标记的方法是使用编写自定义模型联编程序(例如https://stackoverflow.com/a/4316327/1637105)的痛苦让我将我的视图模型中的属性绑定到别名(在我的情况下,属性名称不是有效的C#变量名称)。
这个问题的关键是只是为了确认,我真的需要去实现自定义模型绑定的痛苦。
任何建议或替代解决方案都是值得欢迎的!
编辑:
它发生,我认为另一个解决办法是找出一种方法来从张贴的参数的值,而不会触发(或同时处理)的HttpRequestValidationException。