【问题标题】:"A potentially dangerous Request.Form value.." error when ModelState.IsValid is false当 ModelState.IsValid 为 false 时出现“潜在危险的 Request.Form 值..”错误
【发布时间】:2009-07-14 07:32:39
【问题描述】:

在我们的一个 ASP.NET MVC 应用程序中,我们使用 FCKEditor 来允许用户输入富文本。为了关闭控制器动作中的验证,我们设置了属性

[ValidateInput(false)]

只要页面中没有业务验证错误,用户就可以保存和修改富文本。

如果任何业务验证失败并且 ModelState.IsValid 设置为 false,则在呈现页面时会引发以下异常。谁能告诉我如何解决这个问题?

从客户端检测到有潜在危险的 Request.Form 值 (Programme_Overview="

这里是代码

    [ValidateInput(false)]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Schedule(FormCollection formValues)
    {
      // some code
      if (ModelState.IsValid)
        {
            //do something here...
        }
        else
        {               
            return View(programDetails);
        }


     }

    //// View code that render the fckeditor text area
    <%= Html.TextArea("Programme_Overview", Model.Programme.Overview, new { row = 7 })%>

【问题讨论】:

  • 抱歉忘记在原帖中提及。我们在动作方法中设置 [ValidateInput(false)]。但只有当 ModelState.IsValid 为 false 时才会引发此异常

标签: asp.net-mvc fckeditor


【解决方案1】:

刚刚出现这个问题,解决方法是更新 fck 配置文件 fckconfig.js

FCKConfig.HtmlEncodeOutput = false;

应该是

FCKConfig.HtmlEncodeOutput = true ;

【讨论】:

    【解决方案2】:

    只需将以下内容添加到您的操作中:

    [ValidateInput(false)]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SomeAction() {}
    

    【讨论】:

    • 即使在指定 [ValidateInput(false)] 之后,如果在渲染视图时将 ModelState.IsValid 设置为 false,也会引发异常
    【解决方案3】:

    我猜这个项目是从 1.0 之前的 RTM 项目迁移而来的。

    原始 ASP.NET 具有页面级“危险输入”验证,您会遇到这种情况。我们通过更改 Views 文件夹中的 Web.config 文件在系统范围内关闭了它,但我不记得我们是在何时进行更改的。如果您的项目早于此更改,那么您将不会在 Views 文件夹中的 Web.config 文件中包含该设置。

    因此您可以创建一个新的 MVC 项目并查看 Web.config 文件以查看您可能想要复制的设置。如果需要,您也可以逐页禁用此功能。

    http://www.asp.net/learn/whitepapers/request-validation/

    【讨论】:

    • Brad Wilson,我不确定我们有什么版本的 MVC。你能告诉我如何在我的电脑上找到它吗? 2 个月前,我们在 Web Installer 的帮助下安装了 MVC。位于 View 文件夹中的 web.config 文件具有
    • 你已经安装了 1.0,我看到了 validRequest="false" 行,所以我不清楚你为什么会遇到这个错误(除非你添加了“validateRequest=true”到实际页面中的 指令)。
    【解决方案4】:

    很可能您的 FCKEditor 的一些 HTML 输出以某种方式提交了。

    您可以尝试关闭验证:

    public MyController
    {
        [ValidateInput (false)]
        public ActionResult MyAction ()
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 2010-12-25
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多