如何在ASP.NET MVC 4中使用Request.Unvalidated?

时间:2012-10-10 18:08:52

标签: asp.net-mvc-4 validation

根据此链接,现在我们可以使用Request.Unvalidated来访问表单字段的原始值,而不会触发请求验证(并查看可怕的错误消息一个有潜在危险的Request.Form ... 的)。不幸的是我无法让它发挥作用。

的Web.config

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />

视图模型中的简单字段:

// [AllowHtml] - even I tried this, it still did not work :(
public string Description { get; set; }

控制器动作:

[HttpPost]
public ActionResult Edit([Bind(Prefix = "Edit")] EditModel model)
{
  string s = Request.Unvalidated.Form["Edit.Description"];
}

我仍然看到错误“有潜在危险的Request.Form ......”,为什么?尝试谷歌但没有ASP.NET MVC的例子。

工具箱:我正在使用ASP.NET MVC 4项目,目标是.NET 4.5和VS2012。

谢谢,

UPDATE :使用AllowHtml和Description属性修复了我的问题,甚至不需要Request.Unvalidated。我在下面的@ webdeveloper的回答中提到了一个问题。

4 个答案:

答案 0 :(得分:7)

答案 1 :(得分:1)

看起来您需要将请求验证模式设置为2.0,如webdeveloper的第一个链接中所述。试试这个:

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />

答案 2 :(得分:1)

我知道问题已经由 @webdeveloper 解决了。但是,有关requestValidationMode的更多信息。

例如:它可以是 2.0 4.0

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />

<httpRuntime targetFramework="4.5" requestValidationMode="4.0" />

此请求验证仅针对页面启用。以下内容来自MSDN

的引用
  • 4.0 (默认值)。 HttpRequest对象在内部设置一个标志,指示每当访问任何HTTP请求数据时都应触发请求验证。这保证了在请求期间访问诸如cookie和URL之类的数据之前触发请求验证。配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置将被忽略。

  • 2.0 仅对页面启用请求验证,而不是对所有HTTP请求启用。此外,配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置用于确定要验证的页面请求。

不会验证分配给此属性的值以匹配特定版本的ASP.NET。任何小于4.0的数值(例如,3.7,2.9或2.0)都将被解释为2.0。任何大于4.0的数字都被解释为4.0。

因此,最初定义requestValidationMode="4.5"将被解释为requestValidationMode="4.0"

答案 3 :(得分:0)

此问题归因于模型绑定器。对于您的代码,您需要从模型绑定中排除属性“描述”。在属性中允许使用html的另一种方法,您可以在视图模型中适当地使用[AllowHtml]属性