2012-04-25 74 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

相關問題