首页 > 解决方案 > 无法在 Framework 4.6.1 中验证数据

问题描述

最近我将一个项目从 Framework 4.6 升级到了 4.6.1。我们开始面临以下问题:

我们将所有的 css 文件组合起来生成一个通用 css 文件。在此过程中,AjaxControlToolkit Calendar 创建了一个 WebResource.axd 文件。当我们尝试处理此文件时,解密失败并抛出错误,说明:“无法验证数据”。

使用以下代码:

var queryString = WebResourcePath.Split(new[] { '?' })[1];

        var stringBuilder = new StringBuilder();
        var textWriter = new StringWriter(stringBuilder);
        var context = new HttpContext(new SimpleWorkerRequest("/WebResource.axd", queryString, textWriter));

        var urlEncodedData = context.Request.QueryString["d"];

        var encryptedData = HttpServerUtility.UrlTokenDecode(urlEncodedData);

        var machineKeySection = typeof(MachineKeySection);
        var paramTypes = new Type[] { typeof(bool), typeof(byte[]), typeof(byte[]), typeof(int), typeof(int) };
        var encryptOrDecryptData = machineKeySection.GetMethod("EncryptOrDecryptData", BindingFlags.Static | BindingFlags.NonPublic, null, paramTypes, null);

        try
        {
            var decryptedData = (byte[])encryptOrDecryptData.Invoke(null, new object[] { false, encryptedData, null, 0, encryptedData.Length });
            var decryptedContent = Encoding.UTF8.GetString(decryptedData).Substring(1);
            var resourceParts = decryptedContent.Split('|');

            Assembly = AssemblyCache.Load(resourceParts[0]);
            ResourceName = resourceParts[1];
        }
        catch (Exception ex)
        {
            throw ex;
        }

在线抛出错误:var decryptedData = (byte[])encryptOrDecry........

我建议使用静态机器密钥的一些解决方案,但我们已经在这样做了。

注意:仅当我们将 httpRuntime targetFramework 设置为 4.6.1 时才会发生这种情况,否则它会按预期工作。

标签: asp.net

解决方案


来自 forums.asp.net:

所以我们的问题是一些 Webresource.axd 请求被浏览器缓存(我们不知道......)但是我们的机器键发生了变化。

修复 Web.config 中的 machineKeys 并等待我们所有的用户清理他们的浏览器缓存。

评论:
https ://forums.asp.net/post/5620791.aspx

完整主题: https ://forums.asp.net/t/1963234.aspx?Unable+to+validate+data+EncryptOrDecryptData+problem

希望有帮助


推荐阅读