如何解决绕过用于获取请求的MVC验证
| 我的控制器中有以下代码:[HttpGet]
public ActionResult Register(UserRegistrationModel model)
{
return View();
}
我之所以这样,是因为“注册”页面可以用其他页面生成的来自querystring的值预先填充。
问题在于,当我的视图被渲染时,它会显示验证错误……是否有一种方法可以绕过它?
解决方法
通常,当执行这样的动作时,您倾向于使用单个参数而不是完整的模型。看起来正在发生的事情是模型绑定程序正在启动并为您验证模型。
您是否可以通过调试动作来验证“ 1”为假,并且其中包含与模型中的字段相关的某些无效密钥?如果是这样,您可以在返回视图之前尝试执行
ModelState.Clear()
,以防止在这种情况下出现验证错误。
,快速解答:尝试在\'GET \'操作方法上使用[ValidateInput(false)]
更新:
使用asp.net 4,要获得确认ValidateInput属性的框架,您还需要在web.config中配置验证模式。
将以下内容设置为<system.web>
元素的子元素:
<httpRuntime requestValidationMode=\"2.0\"/>
为什么您的\'GET \'操作方法中包含ViewModel?
利用默认的模型绑定器。
例如,我们有子动作返回绑定到复杂ViewModels设置的局部视图,我们不想为每个子动作显式实例化并重建ViewModel。
例如,“订单”页面的“编辑”页面采用一个EditOrderViewModel,该继承继承了BaseUserViewModel,后者又包含用户特定的显示数据(用户名,购物车商品数等)。
因此,返回“编辑”视图的操作方法如下所示:
[ValidateInput(false)]
[HttpGet]
public ViewResult Edit(EditOrderViewModel editOrderVm)
{
...
return View(\'Edit\',editOrderVm );
}
现在,只要Request to this child action方法包括以某种方式包含BaseUserViewModel的属性(例如通过Cookies,Form和QueryString属性),则默认模型绑定程序将实例化并使用所有基本视图模型数据填充EditOrderViewModel。
但是,当我们第一次加载此页面时,我们不希望以用户尚未编辑的形式显示验证消息...
因此,我们关闭“ \'GET \”请求的模型验证>仅确保您验证\'POST \'请求即可!
,我遇到了同样的问题,我在模型中将CustomValidation属性用于Create操作,但对于另一个需要将更改保存到数据库的操作,验证会导致错误。所以我通过删除CustomValidation属性并仅在Create action方法中验证模型来修复它
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。