MVC 4 - Razor - “从客户端检测到一个潜在危险的request.form值”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC 4 - Razor - “从客户端检测到一个潜在危险的request.form值”相关的知识,希望对你有一定的参考价值。

我的视图中有一个i-Frame链接到外部网站。此站点接受一些值和一些配置设置。这些配置设置的一部分是“CallBackURL”。此外部网站发布到此CallBackUrl。

我将CallBackURL指定为对我的控件的操作。

查看代码

<form id="testForm" method="post" target="testFrame">
  <input type="hidden" name="RequestXML" ID="RequestXML" value="<Request><RedirectURL>Account/TokenRequest</RedirectURL></Request>"
</form>

<iframe id="testFrame" name="testFrame" frameborder="0" style="width:1000px;height:500px"></iframe>

控制器代码

  [HttpPost]
  [ValidateInput(false)]
  public ActionResult TokenRequest()
  {
    if (Request.Form["ResponseXML"] != null)
      ViewBag.ResponseXML = Request.Form["ResponseXML"];

    return PartialView();
  }

在我的控制器操作中,我收到以下错误:“从客户端检测到一个潜在危险的request.form值”

我也在web配置中设置了它

<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false"...

我究竟做错了什么?

编辑我正在编辑错误的web.config文件。我将它添加到views文件夹中的web.config。一旦我把它改成了正确的地方,它就开始工作了。

答案

上面的解决方案在MVC4中对我不起作用。对我有用的只是将一个属性放在动作之上。无需更改web.config或添加Allowhtml属性。

[HttpPost]
[ValidateInput(false)]
public ActionResult TokenRequest(TokenRequestModel model)
{
  if (!string.IsNullOrEmpty(model.ResponseXML))
  ViewBag.ResponseXML = model.ResponseXML;
  // ...
另一答案

尝试使用模型而不是直接使用html控件。并且还使用AllowHtml属性。

模型:

public TokenRequestModel
{
   [AllowHtml]
   public string ResponseXML {get;set;}
}

行动:

[HttpPost]
public ActionResult TokenRequest(TokenRequestModel model)
{
  if (!string.IsNullOrEmpty(model.ResponseXML))
      ViewBag.ResponseXML = model.ResponseXML;

  return PartialView();
}
另一答案

我试过这个并为我工作:

在表单上提交调用一个javascript函数,该函数在hiddenfield中保存使用'encodeURIComponent'编码的值。

然后在同一个函数中清除带有危险值的文本框的值。通过这种方式,表单将只提交编码值。

<input type="submit" value="Save" class="btn btn-danger" onclick="encodeLabel1()" />

<script>
function encodeLabel1() {
            var label = $('#txt').val();
            $('#hfLabel1Encoded').val(encodeURIComponent(label));
            $('#txt').val('');
        }
 </script>

这是一种解决方法,但它可以工作,验证仍然有效。

另一答案

你可以试试

  [HttpPost]
  public ActionResult TokenRequest()
  {
    if (Request.Unvalidated().Form["ResponseXML"] != null)
      ViewBag.ResponseXML = Request.Unvalidated().Form["ResponseXML"];

    return PartialView();
  }

我认为Unvalidated()会使错误消失,而无需编辑webconfig

以上是关于MVC 4 - Razor - “从客户端检测到一个潜在危险的request.form值”的主要内容,如果未能解决你的问题,请参考以下文章

JQuery JCrop Image MVC 4 Razor 失败

在 Razor (C#/MVC 4) 中生成“友好 URL”的帮助程序

C# MVC 4 RAZOR - JSON 使用 @foreach 从控制器返回列表到视图

MVC 4 Razor - 动态命名javascript函数

MVC 4 Razor 中的多个单选按钮组

如何在 asp.net MVC 4 Razor 中绑定剑道网格