.net - 绕过获取请求的 MVC 验证

标签 .net asp.net-mvc

我的 Controller 中有这段代码:

[HttpGet]
public ActionResult Register(UserRegistrationModel model)
{
    return View();
}

我喜欢这样做的原因是,Register 页面可以预先填充来自其他页面生成的查询字符串的值。

问题是当我的 View 被渲染时,它会显示验证错误......有没有办法绕过它?

最佳答案

快速回答:尝试在“GET”操作方法上使用 [ValidateInput(false)]

更新:
使用 asp.net 4,要让框架确认 ValidateInput 属性,您还需要在 web.config 中配置验证模式。

将以下设置为 <system.web> 的子项元素:

<httpRuntime requestValidationMode="2.0"/>

为什么在您的“GET”操作方法中有一个 ViewModel?

利用默认模型绑定(bind)器。

例如,我们有子操作返回部分 View ,这些 View 绑定(bind)到复杂的 ViewModel 设置,我们不想为每个子操作显式实例化和重建 ViewModel。

例如,订单页面的编辑页面采用 EditOrderViewModel,它继承 BaseUserViewModel,而 BaseUserViewModel 又包含用户特定的显示数据(用户名、购物车商品计数等)。

所以返回 Edit View 的操作方法如下所示:
[ValidateInput(false)]
[HttpGet]
public ViewResult Edit(EditOrderViewModel editOrderVm) 
{ 
    ... 
    return View('Edit', editOrderVm );
}

现在只要对该子操作方法的请求以某种方式包含 BaseUserViewModel 的属性(例如,通过 Cookies、Form 和 QueryString 属性),那么默认模型绑定(bind)器将实例化并使用所有基本 View 模型数据填充 EditOrderViewModel。

然而,当我们第一次加载这个页面时,我们不希望验证消息以用户还没有机会编辑的形式出现......

因此,我们关闭“GET”请求的模型验证 > 只需确保您验证“POST”请求!

关于.net - 绕过获取请求的 MVC 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066043/

相关文章:

c# - FlowDocument 强制分页 (BreakPageBefore)

c# - 没有声明的 Asp.net Identity 2.x

c# - @Ajax.BeginForm 请求/响应正常,但 Controller 不重定向

asp.net-mvc - Razor View 中的 foreach 内的 foreach 不起作用

asp.net-mvc - 如何将枚举值映射到查找表 - Code First

.net - 如何使用 LINQ 创建 IQueryable 类型的匿名对象

c# - 系统托盘图标双击/单击问题

c# - Bitmap 的辅助方法和正确处理 C#

c# - 后面代码中的拼写检查类

.net - 如何*有效*地在程序集中定位特定类型?