2

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

网页配置

<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 的例子。

工具箱:我正在处理一个针对 .NET 4.5 和 VS2012 的 ASP.NET MVC 4 项目。

谢谢,

更新:使用带有 Description 属性的 AllowHtml 解决了我的问题,甚至不需要 Request.Unvalidated。正如我在@webdeveloper 的回答中评论的那样,仍然存在一个问题。

4

4 回答 4

8

看看这个链接:

他们将帮助您了解它是如何工作的。

于 2012-10-10T18:19:33.670 回答
1

我知道@webdeveloper已经解决了这个问题。但是,有关requestValidationMode.

例如:它可以是2.04.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".

于 2014-07-03T09:56:11.220 回答
1

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

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />
于 2013-01-23T20:43:32.997 回答
0

这个问题是由于模型绑定器造成的。对于您的代码,您需要从模型绑定中排除属性“描述”。另一种允许在属性中使用 html 的方法,您可以在视图模型中的属性中使用 [AllowHtml] 属性

于 2020-05-06T05:12:47.660 回答