asp.net - 无法在 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 时才会发生这种情况,否则它会按预期工作。
解决方案
来自 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
希望有帮助
推荐阅读
- batch-file - 通过批量自动 FTP 下载
- solidity - 存储中的状态变量:“低阶对齐”文档中的这句话是什么意思?
- powerbi - 如何将计算列添加到 PowerBI 数据集
- android - 设置按钮属性时,Android CheckBox 用纯色填充
- solidity - 是否有在 transferFrom 上触发的回调函数?
- python - 散景:在 ColumnDataSource 中编辑数据的某些方法之间有什么区别
- laravel - 如何修改此代码以组合来自存储库 laravel 的两个模型表的数据
- powerbi - 使用计算组中的计算项从切片器获取选定的度量名称或计算项名称
- xamarin - Xamarin iOS 不会构建。资产目录文件 Contents.json 的路径共享冲突
- c++ - 读取文件中的多种数据类型并将其存储在链表中 C++