2016-10-06 5 views
2

インデックスページからコントローラにSVG文字列を送信しようとしています。しかし、それはヌル値を得ています。jQuery AjaxからMVCコントローラへのデータの送信

var str = "<svg height=\"350\" version=\"1.1\" ... svg properties ..." 
console.log(str); 

$.ajax({ 
    type: "POST", 
    //contentType: 'application/x-www-form-urlencoded; charset=UTF-8', 
    //dataType: "text", 
    url: window.location.origin + '/NavigationExport/GetSvgData', 
    //data: '{"value":"' + str + '"}', 
    data: {value :str}, 
}).done(function (data) { 
    debugger 
}); 

ここは私のコントローラコードです。

[HttpPost] 
public void GetSvgData(string value) 
{ 
    return; 
} 

しかし、このコードでは500の内部サーバーエラーが発生しています。

潜在的に危険なRequest.Form値がクライアントから検出されました(value="<svg height="350" ve...")。

概要ASP.NETは要求の中で、HTMLマークアップまたはスクリプトを含む可能性があるため、潜在的に危険なデータを検出しました。 データは、クロスサイトスクリプティング攻撃など、 アプリケーションのセキュリティを侵害しようとしている可能性があります。このタイプの 入力がアプリケーションで適切な場合は、 ウェブページにコードを含めて明示的に許可することができます。詳細については、 http://go.microsoft.com/fwlink/?LinkID=212874を参照してください。

私は

data: '{"value":"' + str + '"}' 

を使用している場合、それはMVCはあなたが要求してHTMLを送信しようとしていると考えて、いずれかを停止することを防ぐために問題がある

答えて

3

コントローラにnull値を送信しますXSS攻撃アクションにValidateInputアノテーションを追加することで、HTML/XMLを許可することができます。

[HttpPost] 
[ValidateInput(false)] 
public void GetSvgData(string value) 
{ 
    return; 
} 
+0

[AllowHtml]は[プロパティ]宣言でのみ有効です。ここでエラーを出します。 – Anurag

+0

ああ、私の悪い。回答が更新されました –

+0

ありがとうございます。出来た。 :D – Anurag

1

あなたがアクションに渡すHTML文字列を許可するように、コントローラにアクション属性として[ValidateInput(偽)]を使用することができます:あなたのケースでは、これを試してみてください。

[ValidateInput(false)] 
    public ActionResult ActionName() 
    { 

    } 
関連する問題