Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4到MV5机器密钥验证_C#_.net_Asp.net Mvc - Fatal编程技术网

C# MVC4到MV5机器密钥验证

C# MVC4到MV5机器密钥验证,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,在使用microsoft软件将我的mvc4项目迁移到mvc5之后 我必须发送以下错误消息: System.Configuration.ConfigurationErrorsException:'使用时 或者 机关枪,保护机关枪。取消对API的保护,“验证” 属性必须是以下值之一:SHA1、HMACSHA256、HMACSHA384、, HMACSHA512或alg:[KeyedHashAlgorithm] 这是机器密钥配置:validation=“AES”decryption=“AES”。 我

在使用microsoft软件将我的mvc4项目迁移到mvc5之后

我必须发送以下错误消息:

System.Configuration.ConfigurationErrorsException:'使用时 或者 机关枪,保护机关枪。取消对API的保护,“验证” 属性必须是以下值之一:SHA1、HMACSHA256、HMACSHA384、, HMACSHA512或alg:[KeyedHashAlgorithm]

这是机器密钥配置:validation=“AES”decryption=“AES”。 我的项目使用的是框架4.7.2。当我将验证更改为SHA1并将解密更改为AUTO时,它就可以工作了。 我需要让它与AES思想一起工作,我不知道为什么它与MVC4而不是5一起工作。 我还尝试在web.config的httpRuntime配置中添加framework4.7,但得到了相同的错误。 有什么想法吗?多谢各位

新状态27-09-2019

在引发异常之前(在使用@Html.AntiForgeryToken()之前),我添加了一行代码,以验证web配置中的机器密钥配置在调试时是否具有预期值

MachineKeySection section = (MachineKeySection) 
  ConfigurationManager.GetSection ("system.web/machineKey");
兼容性模式设置为“Framework20SP2”,但我仍然收到错误消息,说compatibilityMode是Framework45

Web.Config

<machineKey compatibilityMode="Framework20SP2" validationKey="..." decryptionKey="..." validation="AES" decryption="AES" />
兼容模式是“Framework20SP2”,我一升级到MVC5,它就变成了“Framework45”。这意味着MVC5的更新包之一强制使用新的兼容模式,即使在web.config中另有规定。

根据这一点-验证值必须是SHA1(我们将其解释为HMACSHA1)、HMACSHA256、HMACSHA384、HMACSHA512或对KeyedHashAlgorithm派生类型的引用。与ASP.NET 4中的值一样,不再允许使用AES、3DES和MD5


可能有一些使用machieKey兼容模式的解决方案。

在升级到MVC5之前,它工作正常,项目使用的是.net 4.7.2。我在web.config中注释了所有targetFramework配置,以确保不使用兼容模式,并且不会改变任何内容。将compatibilityMode=“Framework20SP1”添加到web.config也没有帮助。machineKey是在web.config的system.web部分中设置的。嗯,没有足够的代码从上面拨打电话。这应该会有帮助,主要是llnk来生成一个,我想自从我上次使用以来链接已经改变了,使用这是我的web.config我不需要生成一个它是在web.config中指定的。不确定什么是Framework20SP2你需要它吗?把它拿出来。。。您可能需要重新生成dotney=T4.5的密钥。看到我给的链接。。。这意味着不同版本的dotnet有不同的密钥。我在4.7.2M上使用我和im的4.5键。该项目没有更改.net版本,在mvc4中是4.7.2,更新到mvc5后也是如此。唯一改变的是我尝试添加兼容模式Framework20SP2,因为错误消息说compatibilityMode Framework45不适用于AES验证。如果machinekey节点中未设置兼容模式,则该模式也不起作用。
MachineKeySection section = (MachineKeySection) 
ConfigurationManager.GetSection ("system.web/machineKey");