将数据从jQuery Ajax发送到MVC COntroller

时间:2016-10-06 07:14:19

标签: c# jquery .net ajax controller

我正在尝试从索引页面向控制器发送SVG字符串。但它获得了一个空值。

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内部服务器错误。

  

从客户端(value="<svg height="350" ve...")检测到一个潜在危险的Request.Form值。

     

描述:ASP.NET已检测到请求中的数据   有潜在危险,因为它可能包含HTML标记或脚本。   数据可能代表试图破坏您的安全性   应用程序,例如跨站点脚本攻击。如果是这种类型的   输入在您的应用程序中是合适的,您可以在a中包含代码   网页明确允许它。有关更多信息,请参阅   http://go.microsoft.com/fwlink/?LinkID=212874

如果我使用

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

它将空值发送给控制器

2 个答案:

答案 0 :(得分:3)

问题是因为MVC认为您正在尝试在请求中发送HTML,并阻止它阻止任何XSS攻击。您可以通过向Action添加ValidateInput注释来允许HTML / XML。在你的情况下,试试这个:

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

答案 1 :(得分:1)

您可以在控制器中使用[ValidateInput(false)]作为操作属性,以允许HTML字符串传递给操作。

MATCH (a) WHERE a.uid in [1,2,3,4] RETURN a