5

我的视图上有一个链接到外部站点的 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 值”

我也在 webconfig 中设置了这个

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

我究竟做错了什么?

编辑 我正在编辑错误的 web.config 文件。我将它添加到视图文件夹内的 web.config 中。一旦我将其更改为正确的位置,它就开始工作了。

4

4 回答 4

19

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

[HttpPost]
[ValidateInput(false)]
public ActionResult TokenRequest(TokenRequestModel model)
{
  if (!string.IsNullOrEmpty(model.ResponseXML))
  ViewBag.ResponseXML = model.ResponseXML;
  // ...
于 2012-08-03T09:04:23.757 回答
3

尝试使用模型而不是直接使用 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();
}
于 2012-05-09T10:15:32.537 回答
2

你可以试试

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

    return PartialView();
  }

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

于 2013-06-12T09:20:03.197 回答
1

我试过这个并为我工作:

在表单提交上调用一个 javascript 函数,该函数将使用“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>

这是一种解决方法,但它有效并且验证仍然有效。

于 2018-10-04T08:04:33.850 回答