Je reçois l’erreur suivante à certains moments sur le site asp.net.
Sys.WebForms.PageRequestManagerServerErrorException:
Validation of viewstate MAC failed.
If this application is hosted by a Web Farm or cluster,
ensure that <machineKey> configuration specifies the
same validationKey and validation algorithm.
AutoGenerate cannot be used in a cluster.
Quand le rafraîchissement de la page est terminé, aucun problème. Comment puis-je résoudre ce problème?
Si vous utilisez une batterie de serveurs Web et exécutez la même application sur plusieurs ordinateurs, vous devez définir explicitement la clé d'ordinateur dans le fichier machine.config:
<machineKey validationKey="JFDSGOIEURTJKTREKOIRUWTKLRJTKUROIUFLKSIOSUGOIFDS..." decryptionKey="KAJDFOIAUOILKER534095U43098435H43OI5098479854" validation="SHA1" />
Placez-le sous la balise <system.web>
.
L'AutoGenerate pour le code machine ne peut pas être utilisé. Pour générer votre propre machineKey, consultez le script powershell suivant: https://support.Microsoft.com/en-us/kb/2915218#bookmark-appendixa
Microsoft dit de ne jamais utiliser un site Web générateur de clé .
Comme tout le monde ici, j'ai ajouté ceci à mon web.config.
<System.Web>
<machineKey decryptionKey="ABC123...SUPERLONGKEY...5432JFEI242"
validationKey="XYZ234...SUPERLONGVALIDATIONKEY...FDA"
validation="SHA1" />
</system.web>
Cependant, j'ai utilisé IIS comme générateur MachineKey comme ceci:
Remarques:
J'ai eu ce problème, et pour moi la réponse était différente des autres réponses à cette question.
J'ai une application avec beaucoup de clients. J'attrape toutes les erreurs dans application_error dans global.asax
et je m'envoie un email avec le détail de l'erreur. Après avoir publié une nouvelle version de mes applications, j'ai commencé à recevoir un grand nombre de messages d'erreur Validation of viewstate MAC.
Après une journée de recherche, je me suis rendu compte que j’avais une minuterie dans mes applications, qui actualisait chaque minute un panneau de mise à jour. Ainsi, lorsque j'ai publié une nouvelle version de mes applications, et qu'une cliente a laissé son ordinateur ouvert sur mon site Web. Je reçois un message d'erreur chaque fois que le minuteur s'actualise, car l'état actuel de viewstate ne correspond pas au nouveau. J'ai reçu ce message jusqu'à ce que tous les clients aient fermé le site Web ou actualisé leur navigateur pour obtenir la nouvelle version.
Je suis désolé pour mon anglais et je sais que mon cas est très spécifique, mais si cela peut aider quelqu'un à gagner un jour, je pense que c'est une bonne chose.
Cette solution fonctionnait pour moi dans ASP.NET 4.5 à l'aide d'un site Web Forms.
Collez la clé de la machine dans la section de code suivante:
<configuration
>
<system.web
>
<machineKey ... />
</system.web
>
</configuration
>
Vous ne devriez plus voir l'erreur Viewstate Mac Failed. Chaque site Web du même pool d'applications doit avoir une clé d'ordinateur distincte sinon cette erreur se poursuivra.
Sur un environnement multi-serveur, cette erreur se produit probablement lorsque la session expire et qu'une autre instance d'une application est appelée avec le même identifiant de session et la même clé d'ordinateur, mais sur un autre serveur. Tout d'abord, chaque serveur produit sa propre clé d'ordinateur, qui est ensuite associée à une seule instance d'une application. Lorsque la session expire et que le serveur actuel est occupé, l'application est redirigée comme, via l'équilibreur de charge, vers un serveur plus opérationnel. Dans mon cas, je lance la même application à partir de plusieurs serveurs, le message d'erreur suivant:
La validation du MAC Viewstate a échoué. Si cette application est hébergée par un Ferme Web ou cluster, assurez-vous que la configuration spécifie la même validationKey et le même algorithme de validation
Définir le code machine sous web.config a résolu le problème . Mais au lieu d’utiliser des sites tiers pour la génération de code qui pourraient être corrompus, veuillez l’exécuter à partir de votre commande Shell: Sur la base de la solution Microsoft 1a, https://support.Microsoft.com/en-us/kb/2915218#AppendixA
# Generates a <machineKey> element that can be copied + pasted into a Web.config file.
function Generate-MachineKey {
[CmdletBinding()]
param (
[ValidateSet("AES", "DES", "3DES")]
[string]$decryptionAlgorithm = 'AES',
[ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
[string]$validationAlgorithm = 'HMACSHA256'
)
process {
function BinaryToHex {
[CmdLetBinding()]
param($bytes)
process {
$builder = new-object System.Text.StringBuilder
foreach ($b in $bytes) {
$builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
}
$builder
}
}
switch ($decryptionAlgorithm) {
"AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
"DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
"3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
}
$decryptionObject.GenerateKey()
$decryptionKey = BinaryToHex($decryptionObject.Key)
$decryptionObject.Dispose()
switch ($validationAlgorithm) {
"MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
"SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
"HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
"HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
"HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
}
$validationKey = BinaryToHex($validationObject.Key)
$validationObject.Dispose()
[string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
"<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
$decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
$validationAlgorithm.ToUpperInvariant(), $validationKey)
}
}
Ensuite:
Generate-MachineKey
Votre clé ressemblera à: <machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />
Generate-MachineKey -validation sha1
Votre clé ressemblera à: <machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />
mon problème était ce morceau de code javascript
$('input').each(function(ele, indx){
this.value = this.value.toUpperCase();
});
Il était en train de déconner avec le champ caché de viewstate alors je l'ai changé en dessous du code
$('input:visible').each(function(ele, indx){
this.value = this.value.toUpperCase();
});
J'ai eu ce même problème et il était dû à un Gridview (généré à partir d'un code vb) sur la page qui avait le tri activé. La désactivation de Trier a résolu mon problème. Je n'ai pas ce problème avec les vues de grille créées en utilisant un SQLdatasource.
Ce message d'erreur s'affiche normalement après la publication de votre site Web sur le serveur.
Le principal problème réside dans le pool d'applications que vous utilisez pour votre site Web.
Configurez votre site Web pour utiliser la version appropriée de .NET Framework (c'est-à-dire v4.0) dans la section Général du pool d'applications associé à votre site Web.
Sous Modèle de processus, définissez la valeur Identité sur Service réseau.
Fermez la boîte de dialogue, cliquez avec le bouton droit de la souris sur votre site Web et sélectionnez Paramètres avancés ... dans l’option Gérer le site Web du menu contenu. Dans la boîte de dialogue, sous la section Général, assurez-vous que vous avez sélectionné le nom correct du pool d'applications à utiliser.
Votre site Web devrait maintenant fonctionner sans aucun problème.
J'espère que cela vous aide à surmonter cette erreur.
Je ne sais pas comment cela s'est passé, mais j'ai commencé à avoir cette erreur dans les pages de mon formulaire de soumission interne. Donc, chaque fois que je soumets quelque chose, je reçois cette erreur. Mais le problème est que ce site Web fonctionne presque 5-6 ans. Je ne me souviens pas d'avoir apporté un changement important.
Aucune des solutions n'a fonctionné pour moi.
J'ai configuré une clé machine avec le script Microsoft et copié dans mon web.config
J'ai exécuté asp.net regiis script.
aspnet_regiis -ga "IIS APPPOOL\My App Pool"
Aussi essayé d'ajouter ce code dans la page:
enableViewStateMac="false"
toujours pas de chance.
Une autre idée pour résoudre ce problème?
METTRE À JOUR:
Enfin, j’ai résolu le problème… .. j’avais intégré ma composante angulaire 4 à mon site Web asp.net… j’avais donc ajouté la base href dans ma page principale. J'ai donc supprimé ce code et il fonctionne bien maintenant.
<base href="/" />
Un autre scénario se produisait pour mes clients. Cela se produisait normalement à un certain moment en raison de changements de quart de travail et les utilisateurs devaient se connecter avec un utilisateur différent. Voici un scénario dans lequel le système anti-falsification protège le système en générant cette erreur:
1- Une fois que vous fermez/ouvrez votre navigateur . 2- Allez sur votre site web et connectez-vous avec "Utilisateur A" 3- Ouvrez un nouvel onglet dans le navigateur et entrez le même site d'adresse. (Vous pouvez voir la page d'accueil de votre site sans aucune authentification) 4- Déconnectez-vous de votre site et connectez-vous avec un autre utilisateur (Utilisateur B) dans le deuxième onglet . 5- Maintenant, retournez au premier onglet auquel vous vous êtes connecté par "Utilisateur A". Vous pouvez toujours voir la page, mais toute action dans cet onglet fera l'erreur. Parce que votre cookie est déjà mis à jour par "l'utilisateur B" et que vous essayez d'envoyer une demande par un utilisateur invalide. (Utilisateur A)
CE QUE DID A TRAVAILLÉ POUR MOI
Recherchez sur le Web "générateur MachineKey"
Accédez à l'un des sites trouvés et générez la clé de machine, qui ressemblera à ... (les chiffres sont plus gros)
... MachineKey
validationKey = "0EF6C03C11FC ... 63EAE6A00F0B6B35DD4" decryptionKey = "2F5E2FD80991C629 ... 3ACA674CD3B5F068" validation = "SHA1" decryption = "AES" />
Copiez et collez dans la section <system.web>
du fichier web.config.
Si vous voulez suivre le chemin que j'ai fait ...
https://support.Microsoft.com/en-us/kb/2915218#AppendixA
Résolution des erreurs de code d'authentification de message d'état d'affichage (MAC) Résolution 3b: utilisez un <machineKey>
explicite
En ajoutant un élément <machineKey>
explicite au fichier Web.config de l'application, le développeur indique à ASP.NET de ne pas utiliser la clé cryptographique générée automatiquement. Voir l’Annexe A pour des instructions sur la génération d’un élément <machineKey>
.
http://blogs.msdn.com/b/amb/archive/2012/07/31/easiest-way-to-generate-machinekey.aspx
Meilleure façon de générer MachineKey - Ahmet Mithat Bostanci - 31 juil. 2012 Vous pouvez rechercher dans Bing un "générateur MachineKey" et utiliser un service en ligne. Honnêtement...
La validation du MAC Viewstate a échoué. Si cette application est hébergée par une batterie de serveurs Web ou un cluster, vérifiez que la configuration <machineKey>
spécifie le même algorithme de validationKey et de validation. AutoGenerate ne peut pas être utilisé dans un cluster.
Réponse :
<machineKey decryptionKey="2CC8E5C3B1812451A707FBAAAEAC9052E05AE1B858993660" validation="HMACSHA256" decryption="AES" validationKey="CB8860CE588A62A2CF9B0B2F48D2C8C31A6A40F0517268CEBCA431A3177B08FC53D818B82DEDCF015A71A0C4B817EA8FDCA2B3BDD091D89F2EDDFB3C06C0CB32" />