2012-04-25 27 views
5

我的视图中有一个i-Frame链接到外部网站。这个网站需要一些值和一些配置设置。作为这些配置设置的一部分是“CallBackURL”。此外部网站发布到此CallBackUrl。MVC 4 - Razor - “从客户端检测到潜在危险的request.form值”

我将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文件。我将它添加到views文件夹中的web.config。一旦我将它改变到正确的位置,它就开始工作。

+0

这也许是antixsser捕捉尖括号。尝试使用Server.HTMLEncode Request.Form语句。 – 2012-04-25 18:54:28

+0

我试过了,它不起作用。我仍然得到这个错误:从客户端检测到潜在危险的Request.Form值(ResponseXML =“ 2012-04-25 19:01:19

回答

2

尝试使用模型而不是直接使用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(); 
} 
+1

这似乎不适用于MVC 4 – Schneider 2012-10-26 21:21:02

+0

优雅的解决方案,在MVC4中工作。将[AllowHtml]添加到与视图中的@ Html.TextAreaFor()匹配的C#属性。所有键入此字段的HTML尖括号现在都会正确加载并保存。 – SushiGuy 2016-05-20 14:13:11

19

将上述溶液不MVC4为我工作。对我而言,只有在行动之上放置一个属性才行。无需更改您的web.config或添加AllowHtml属性。

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

这对我有用,但我使用参数化的sql sprocs将数据传递到数据库,所以我不担心sql注入等;然而,我想你只是想警告用户他们需要提供他们自己的验证实现...再次不是我的Intranet应用程序和有限的用户组关注的问题。 – 2015-07-15 17:07:55

0

您可以尝试

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

    return PartialView(); 
    } 

我认为未经验证的()可以将错误消失,无需编辑webconfig

相关问题