1

在我看来,我正在从 Ajax 调用控制器函数

$.ajax({
    type: "POST",
    url: "@Url.Action("GetSelectedItemsForRoleId","User")",
    data: { optionLabel: '@CommonResource.DropdownNoValueText', optionValue: null, selectedValue: null, filterValue: 0 },
    success: function (result) {
        alert('success');
        var departmentDropdown = $('#RoleId').data("DropDownList");
        departmentDropdown.setDataSource(result);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown)
    {
        alert('XMLHttpRequest ' + XMLHttpRequest);
        alert('textStatus ' + textStatus);
        alert('errorThrown ' + errorThrown);
        //some stuff on failure
    },
    dataType: "json",
    traditional: true,
    async: false
});  

CommonResource.DropdownNoValueText-Välj-

我在故障块中收到以下错误:

从客户端检测到潜在危险的 request.form 值

我的控制器签名如下所示:

public ActionResult GetSelectedItemsForRoleId(string optionLabel, string optionValue, string selectedValue, int filterValue)  

我试图在ValidateInput此函数上方添加注释并将其设置为 false。
之后,字符串显示为-Välj-
这是什么原因,我怎样才能得到原文-Välj-

更新
我进一步尝试了两件事:

  1. @CommonResource.DropdownNoValueText我直接换成了-Välj-。现在我没有收到任何错误。(但这不是正确的解决方案,因为这不会解决语言功能)。
  2. 我用其他东西代替了,比如DropdownNoValueTexteee 它也不会出错。(但即使这也不是解决方案)。CommonResource
4

1 回答 1

0

我对瑞典语和西班牙语字符都有类似的问题。我们使用HttpUtility.JavaScriptStringEncode了从字符串中编码字符并导致 & 后跟哈希符号的方法:

puntuación   

这反过来又导致了 .NET 的安全反应(返回错误)。

解决方案是将类使用的默认编码器更改HtmlUtility为不使用默认编码器 ( HtmlEncoder),而是不使用AntiXssEncoder特殊的瑞典语或西班牙语字符等字符,因为它们是无害的(不能用于 XSS 攻击)。

在此之后,瑞典语/西班牙语字符不会被编码,因此&#也避免了字符串,因此避免了 .NET 的安全反应(错误)。
此更改位于配置文件中,并且可能具有全局影响:

<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder"/>

只是添加一些有关避免情况原因的信息 - 解决此问题的失败尝试是使用HttpUtility.HtmlEncode而不是HttpUtility.JavaScriptStringEncode更改字符串:

puntuaci&amp;#243;n

所以它&amp;被用来代替&#它避免了问题但导致了其他不需要的副作用。

于 2021-12-16T14:24:54.750 回答