68 votes

ASP.NET MVC 5 est-il incompatible avec WebMatrix SimpleMembershipProvider?

Nous avons une application existante qui a été construit sur ASP.NET MVC 4 Web & API. L'admin parties de l'utilisation du site de Simple Adhésion. Je suis intéressé par la mise à niveau de l'application MVC 5 / Web API 2), afin de profiter de certaines des nouvelles fonctionnalités qui ont été ajoutées. Mais on dirait qu'ils pourraient être incompatibles.

Plus précisément, après l'installation de la RC des paquets de NuGet dans l'un des projets dans ma solution, et la mise à jour sur le web.les informations de configuration, l'application commence à mourir lors du démarrage sur la ligne qui appelle WebSecurity.InitializeDatabaseConnection(), avec cette exception:

[MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.]
   WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70
   WebMatrix.Data.Database.OnConnectionOpened() +70
   WebMatrix.Data.Database.EnsureConnectionOpen() +51
   WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
   WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13
   WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +206
   WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87

D'autres projets dans la même solution à l'aide de Simples Membres que j'ai pas mis à niveau continuer à travailler tout aussi bien.

Googler autour d'pour plus d'informations avère que beaucoup de hits pour cette exception, bien sûr, mais rien de particulier à WebMatrix.

FWIW: je sais que Microsoft a mis en place (encore une autre), l'appartenance et l'identité de la solution, mais si il y a moyen de l'utiliser avec la Simple Adhésion des tables, ou une voie de migration homogène pour l'ensemble de nos données de l'utilisateur, ce n'est pas vraiment une option pour nous.

Mise à JOUR (11 Oct)

J'ai juste essayé de nouveau avec une nouvelle caisse de l'actuel coffre de notre application. Je suis à l'aide de Visual Studio 2012, mais sinon, suivre les instructions à partir de MS pour la mise à niveau d'un projet existant. Après la mise à jour de MVC 5 / Web API 2 / EF 6, l'application a démarré un a couru juste fine.

Il n'y avait pas d'approbation explicite des exigences en web.config pour le retirer. J'ai ajouté le code à partir de cette question à l' Global.asax.cs, et il signale que l'application est en cours d'exécution avec une pleine confiance (dans IIS Express, juste F5-ed (VS).

Rajouter le même appel d' InitializeDatabaseConnection(), il commence à mourir avec la même exception.

SOLUTION (28 Oct.)

Essayer la solution de @Kevin mise à jour à partir de vendredi, j'ai trouvé que cela fonctionne. C'était vraiment étrange pour moi que l'ajout de cette apparemment sans paquet permettrait de résoudre ces problèmes de sécurité, et encore plus étrange après que j'ai supprimé le paquet de ma solution, et il continue de travailler.

Regardons de plus près ce qui se passait, j'ai réalisé que la raison de cette mise à jour corrige le problème est assez simple: l' Microsoft.AspNet.WebHelpers paquet a deux dépendances qui ont été ajoutées à ma solution: Microsoft.AspNet.WebPages.Data et Microsoft.AspNet.WebPages.WebData. Microsoft a déplacé le WebMatrix classes dans de nouveaux paquets.

Donc ajouté les aides paquet a résolu le problème, non pas à cause de tout ce qu'il était en train de faire, mais parce qu' il était à l'origine des versions mises à jour de la rupture des assemblages à ajouter à ma solution. La solution à la première incompatibilité, alors, est d'installer ces nouveaux paquets lors de la mise à jour de tout le reste de NuGet:

Install-Package Microsoft.AspNet.WebPages.WebData

36voto

Kevin Junghans Points 10012

WebMatrix est compatible avec MVC 5.

Ce que j'ai fait était de prendre un vide MVC 5 du projet et d'intégrer WebMatrix SimpleMembershipProvider en utilisant SimpleSecurity, un projet open source qui découple SimpleMembership à partir de votre application MVC. Jusqu'à présent, je suis en mesure de créer la base de données, des semences, et de se connecter et se déconnecter. J'ai l'intention d'ajouter d'autres fonctionnalités à cette application de référence, tels que le courriel de confirmation et de différents tests. Quand je suis fait, je vais poster le code source dans le SimpleSecurity Projet

Si je devais deviner, votre problème peut être avec le processus de mise à niveau. Quel est le processus que vous prenez pour mettre à niveau votre MVC 4 projet MVC 5? Avez-vous suivi ce processus? Quelle est la version de WebMatrix assemblées utilisez-vous? Quelle est la version de Visual Studio que vous utilisez? Je suis l'aide de la version 2.0.0.0 de WebMatrix et Visual Studio 2013 RC.


Mise à jour (10/25/2013)

J'ai continué mon expérience avec l'ajout de SimpleMembership à un MVC 5 du projet et quelque part le long de la ligne, il a éclaté et j'ai obtenu les mêmes résultats que @Sixten Otto. Je n'ai pas tester au fur et à mesure, j'ai ajouté des choses, mais je suis suspect, il peut arrivé quand j'ai installé l'API Web assemblées. Ils ne sont pas installés par défaut lors de la création d'un nouveau MVC 5 projet.

J'ai fait un peu plus de recherche sur l'erreur et suis tombé sur ce QA intitulé "Tentative par la sécurité transparente la méthode " WebMatrix.WebData.PreApplicationStartCode.Start()'". C'est un ancien de l'AQ et l'origine de quelqu'un qui était d'obtenir ce même message d'erreur lorsque vous mettez à niveau un MVC 3 app pour MVC 4. Mais récemment, les gens ont été l'ajout de réponses en ce qui concerne la mise à niveau vers MVC 5 et l'une des réponses a fonctionné pour moi. La solution pour moi a été d'installer le package NuGet Microsoft.AspNet.WebHelpers. Après l'installation de ce package tout a bien fonctionné.

Une remarque à propos de mes recherches sur la migration vers la nouvelle ASP.NET l'Identité est qu'ils n'utilisent pas le même hachage de mot de passe, ce qui empêche le déplacement des anciens membres dans une base de données utilisée par ASP.NET l'Identité. ASP.NET l'Identité semble être dans le réel de flux en ce moment donc peut-être qu'ils vont trouver une solution pour ce.


Mise à jour (2/16/14)

J'ai déclaré à tort que l'algorithme de hachage de mots de passe ont été différentes dans les SimpleMembership et ASP.NET l'Identité. Je suppose que c'fondée sur une inspection visuelle des mots de passe hachés, en supposant que c'était juste le hachage de mot de passe qui était dans les champs. Après de nouvelles recherches, j'ai trouvé que SimpleMembership utilise le Système.Web.Les aides.Crypto classe pour le hachage du mot de passe et de ce qui est stocké dans le champ mot de passe est en fait une sous-clé de 256 bits et le sel. Avec cette information, j'ai couru quelques tests pour valider ASP.NET l'Identité peut vérifier les mots de passe sont générés par SimpleMembership, et c'est passé. J'ai essayé de trouver ce que l'algorithme de hachage SimpleMembership utilisé afin que je puisse brancher un mot de passe hasher en ASP.NET l'Identité qui me permettrait de migrer des données à partir d'un SimpleMembership site de vente de celui qui a utilisé ASP.NET l'Identité. S'avère qu'il n'est pas nécessaire. Je parle le hachage de mot de passe et la migration de données de SimpleMembership à ASP.NET Identité plus en détail dans cet article.

30voto

Anushka Points 568

Si vous obtenez l'erreur

Blockquote Tenter par la sécurité transparente la méthode " WebMatrix.WebData.PreApplicationStartCode.Start () "pour la sécurité de l'accès méthode de critique du Système".Web.Les pages web.De rasoir.WebPageRazorHost.AddGlobalImport(Système D'.String)' a échoué.

Afin de résoudre ce installer ce package à l'aide de gestionnaire de package NuGet.

Install-Package Microsoft.AspNet.WebHelpers

Après que , probablement, vous obtiendrez une autre erreur

Blockquote Ne peut pas charger WebMatrix.Les données de la version 3.0.0.0 assemblée

pour résoudre ce installer ce package à l'aide de gestionnaire de package NuGet.

Install-Package Microsoft.AspNet.WebPages.Data

3voto

pranav rastogi Points 1426

Nous travaillons actuellement sur un document de migration permettant de migrer d'une adhésion simple vers une identité ASP.NET. Restez à l'écoute pendant quelques semaines, le temps de pousser ce document de migration. Pour l'instant, vous devez mapper votre schéma d'adhésion simple sur Identity et modifier le code de votre application pour qu'il utilise OWIN pour SignIN / SIgnOut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X