从jQuery Ajax发送数据到MVC控制器

本文关键字:MVC 控制器 数据 jQuery Ajax | 更新日期: 2023-09-27 18:11:50

我正试图从我的索引页发送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...")检测到表单值。

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

如果我使用

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

它向控制器发送空值

从jQuery Ajax发送数据到MVC控制器

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

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

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

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