2012-04-25 15 views
5

私のビューに外部サイトへのリンクがあるi-Frameがあります。このサイトはいくつかの値といくつかの設定を取ります。これらの設定の一部として、「CallBackURL」があります。この外部Webサイトはこの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ファイルを編集していました。私はそれをビューフォルダ内のweb.configに追加していました。私はそれを適切な場所に変更した後、作業を​​開始しました。

+0

のWebConfig編集する必要なく、離れて行くようになると思い

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

試すことができます。 Request.FormステートメントをServer.HTMLEncodeにしてみてください。 –

+0

私はそれを試みました、それは動作しません。私はまだこのエラーが発生します:クライアントからの潜在的に危険なRequest.Form値が検出されました(ResponseXML = "

答えて

2

htmlコントロールを直接使用するのではなく、モデルを使用してみてください。 AllowHtml属性も使用します。

モデル:

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

処置:上記の溶液はMVC4で私のために働いていませんでした

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

    return PartialView(); 
} 
+1

これはMVC 4で動作するようには見えません – Schneider

+0

MVC4で動作するエレガントなソリューション。ビューの@ Html.TextAreaFor()に一致する[AllowHtml]をC#プロパティに追加しました。このフィールドに入力されたすべてのHTML山括弧は、正しくロードされ、正しく保存されます。 – SushiGuy

19

。私にとっては、アクションの上にアトリビュートを置くだけです。 web.configを変更するか、AllowHtml属性を追加する必要はありません。

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

これは私のために働いたが、私はデータベースにデータを渡すためにパラメータ化されたSQLのsprocsを使用しているので、私はSQLインジェクションなどを心配していない。しかし、私はあなたが自分の検証実装を提供する必要があることをユーザーに警告したいと思うでしょう...再び、私のイントラネットアプリケーションと限られたユーザーグループの懸念事項ではありません。 –

0

あなたは私は未検証()がエラーがそれはおそらく角括弧を引くantixsserだ

関連する問題