You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过AJAX传递HTML参数至C# MVC控制器动作时遇危险请求错误

嘿,这个问题我太熟了——ASP.NET自带的请求验证机制在拦着你呢!它默认会把QueryString里的HTML/XML内容当成潜在的XSS攻击风险,所以才抛出那个「A potentially dangerous Request.QueryString value」的错误。给你几个实用的解决方案:

解决方案1:改用POST请求(最推荐)

GET请求本来就不适合传递HTML这类长且包含特殊字符的内容,不仅容易触发安全验证,还有URL长度限制的问题。换成POST把参数放在请求体里就完美解决了:

前端AJAX代码修改:

// 先拿到富文本框的HTML内容
var varWithHTML = $('#yourRichTextBoxId').val();

$.ajax({
    url: "ThisController/ThisAction",
    type: "POST", // 改成POST请求
    cache: false,
    data: { Parameter: varWithHTML }, // 参数放在data里,不再拼URL
    success: function (data, status, jqxhr) {
        // 这里写你的成功回调逻辑
    }
});

后端Controller代码修改:

给对应的动作加上[HttpPost]特性,正常接收参数即可:

[HttpPost]
public ActionResult ThisAction(string Parameter)
{
    // 处理HTML参数的业务逻辑
    return View();
}
解决方案2:如果必须用GET请求,调整验证规则

要是因为特殊场景一定要用GET,那可以针对性地关闭该参数的安全验证,但强烈建议只针对单个参数做修改,别全局关闭,不然会降低整个站点的安全性:

步骤1:给后端参数加上允许HTML的特性

在Controller的动作参数上标记[AllowHtml]:

public ActionResult ThisAction([AllowHtml] string Parameter)
{
    // 处理逻辑
    return View();
}

注意:如果你的项目是.NET 4.0及以上版本,默认的requestValidationMode就是4.0,不需要额外改web.config;如果是旧版本,可能需要在web.config的<httpRuntime>节点里加requestValidationMode="2.0"。

步骤2:前端对HTML参数做URL编码

拼URL的时候一定要用encodeURIComponent()对HTML内容编码,避免特殊字符破坏URL格式:

var sourceURL = "ThisController/ThisAction?Parameter=" + encodeURIComponent(varWithHTML);

$.ajax({
    url: sourceURL,
    type: "GET",
    cache: false,
    success: function (data, status, jqxhr) {
        // 回调逻辑
    }
});
重要提醒:别忘做XSS防护

不管用哪种方法,都要自己对用户输入的HTML做安全清理!ASP.NET的请求验证是第一道防线,关掉之后你得自己用工具(比如Microsoft AntiXSS库)过滤掉恶意脚本,防止XSS攻击。

内容的提问来源于stack exchange,提问作者CJH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:13:23