繁体   English   中英

绑定到不是合法C#变量名称的名称

[英]Binding to a name that is not a legal C# variable name

我在表单上使用Google ReCaptcha元素。 ReCaptcha将参数添加到名为g-recaptcha-response的POSTed参数中,控制器需要检索该参数。 由于此参数名称不是合法的C#变量名称,因此似乎检索其值的唯一方法是通过Request.Params["g-recaptcha-response"] (而不是通过模型绑定到视图模型中的属性) 。

现在,我的问题是在POSTed参数的其他地方,我有几个可能包含HTML标记的表单字段。 我已经用[AllowHtml]注释了视图模型中的关联属性,这可以防止如果用户在表单中输入HTML标记,则模型绑定器将抛出HttpRequestValidationException 但是[AllowHtml]显然仅在模型绑定器中有效 如果用户已在表单中输入HTML标记,则当我引用Request.Params来获取ReCaptcha响应时,我将收到HttpRequestValidationException

据我所知,在仍然允许在选定的POST参数中允许HTML标记的同时获取ReCaptcha响应的唯一方法是使用编写自定义模型绑定程序(例如https://stackoverflow.com/a/ 4316327/1637105 ),以允许我将视图模型中的属性绑定到别名(在我的情况下,该属性名称不是有效的C#变量名称)。

这个问题的目的只是为了确认我确实确实需要费心实现自定义模型绑定程序。

任何建议或替代解决方案都将受到欢迎!

编辑:

在我看来,另一种解决方案将是找到一种从POSTed参数获取值的方法,而无需触发(或在处理时)HttpRequestValidationException。

您可以使用RequestUnvalidated属性来访问值,而无需触发Request Validation。 例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM