【问题标题】:Sending Data from jQuery Ajax to MVC COntroller将数据从 jQuery Ajax 发送到 MVC 控制器
【发布时间】:2016-10-06 07:14:19
【问题描述】:

我正在尝试将 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="&lt;svg height="350" ve...") 检测到具有潜在危险的 Request.Form 值。

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

如果我使用

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

它向控制器发送空值

【问题讨论】:

    标签: c# jquery .net ajax controller


    【解决方案1】:

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

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

    【讨论】:

    • 但 [AllowHtml] 仅对“属性”声明有效。此处报错。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2016-07-22
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多