根据此链接,现在我们可以使用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的回答中提到了一个问题。
答案 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]属性