2017-02-07 50 views
0

我在表单上使用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。

回答

1

您可以使用Request访问值Unvalidated财产,而不会触发请求验证。例如

var captcha = Request.Unvalidated.Form["g-recaptcha-response"];