Wir haben eine vorhandene Anwendung, die auf ASP.NET MVC 4 & Web API erstellt wurde. Die Admin-Teile der Site verwenden die einfache Mitgliedschaft. Ich bin daran interessiert, die Anwendung auf MVC 5 / Web API 2 zu aktualisieren, um einige der neuen Funktionen zu nutzen, die hinzugefügt wurden. Aber es sieht so aus, als wären sie möglicherweise nicht kompatibel.
Insbesondere nach der Installation der RC-Pakete von NuGet in einem der Projekte in meiner Lösung und der Aktualisierung der web.config-Informationen beginnt die Anwendung beim Start auf der aufrufenden Leitung zu sterben WebSecurity.InitializeDatabaseConnection()
, mit der folgenden Ausnahme:
[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
Andere Projekte in derselben Lösung mit Simple Membership, die ich nicht aktualisiert habe, funktionieren weiterhin einwandfrei.
Wenn Sie nach weiteren Informationen suchen, werden natürlich viele Treffer für diese Ausnahme angezeigt, aber nichts Besonderes für WebMatrix.
FWIW: Ich weiß, dass Microsoft eine (weitere) Mitgliedschafts- und Identitätslösung eingeführt hat , aber es sei denn, es gibt eine Möglichkeit, diese mit den vorhandenen Simple Membership-Tabellen oder einem nahtlosen Migrationspfad für alle vorhandenen Benutzerdaten zu verwenden, ist dies keine Option für uns.
UPDATE (11. Oktober)
Ich habe es gerade noch einmal versucht, indem ich den aktuellen Trunk unserer App neu ausgecheckt habe. Ich verwende Visual Studio 2012, habe aber ansonsten die Anweisungen von MS zum Aktualisieren eines vorhandenen Projekts befolgt. Nach dem Update auf MVC 5 / Web API 2 / EF 6 wurde die App gestartet und lief einwandfrei.
Es gab keine expliziten Vertrauensanforderungen in der web.config
zu entfernenden. Ich habe den Code von dieser Frage zu Global.asax.cs
, und es meldet , dass der App mit vollem Vertrauen läuft (in IIS Express, nur F5-ed aus VS).
Wenn Sie denselben Anruf erneut hinzufügen InitializeDatabaseConnection()
, beginnt er mit genau derselben Ausnahme zu sterben.
LÖSUNG (28. Oktober)
Als ich die Lösung in @ Kevins Update vom Freitag ausprobierte, stellte ich fest, dass sie funktioniert. Es war wirklich seltsam für mich , dass das Hinzufügen dieses scheinbar unzusammenhängende Pakets dieser Sicherheitsprobleme lösen würde, und noch mehr seltsam , nachdem ich das Paket aus meiner Lösung entfernt, und es arbeitet weiter .
Bei genauerem Hinsehen wurde mir klar, dass der Grund, warum dies das Verhalten behebt, recht einfach ist: Das Microsoft.AspNet.WebHelpers
Paket enthält zwei Abhängigkeiten, die meiner Lösung hinzugefügt wurden: Microsoft.AspNet.WebPages.Data
und Microsoft.AspNet.WebPages.WebData
. Microsoft hat die WebMatrix-Klassen in neue Pakete verschoben.
Das hinzugefügte Hilfspaket behebt das Problem also nicht aufgrund von Aktivitäten, sondern weil es dazu führte, dass aktualisierte Versionen der defekten Assemblys zu meiner Lösung hinzugefügt wurden . Die Lösung für die anfängliche Inkompatibilität besteht also darin, diese neuen Pakete zu installieren, wenn Sie alles andere von NuGet aktualisieren:
Install-Package Microsoft.AspNet.WebPages.WebData
UPDATE (13. Mai 2015)
Mir wurde vorgeschlagen, dass Sie möglicherweise auch das zweite neue Paket manuell installieren müssen:
Install-Package Microsoft.AspNet.WebPages.Data
Dies sollte nicht erforderlich sein, da dieses Paket eine explizite Abhängigkeit vom ersten ist und NuGet intelligent genug sein sollte, um beide zu installieren. Wenn beim Erstellen jedoch eine Fehlermeldung angezeigt wird oder NuGet die Abhängigkeit nicht hinzufügt, kann dies hilfreich sein.
quelle
Antworten:
WebMatrix ist mit MVC 5 kompatibel.
Ich habe ein leeres MVC 5-Projekt genommen und WebMatrix SimpleMembershipProvider mithilfe von SimpleSecurity , einem Open Source-Projekt, das SimpleMembership von Ihrer MVC-Anwendung entkoppelt, in das Projekt integriert . Bisher bin ich in der Lage, die Datenbank zu erstellen, zu setzen und mich an- und abzumelden. Ich plane, dieser Referenzanwendung weitere Funktionen hinzuzufügen, z. B. eine E-Mail-Bestätigung und verschiedene Tests. Wenn ich fertig bin, werde ich den Quellcode im SimpleSecurity-Projekt veröffentlichen
Wenn ich raten müsste, könnte Ihr Problem mit dem Upgrade-Prozess sein. Welchen Prozess haben Sie unternommen, um Ihr MVC 4-Projekt auf MVC 5 zu aktualisieren? Haben Sie diesen Prozess verfolgt ? Welche Version der WebMatrix-Assemblys verwenden Sie? Welche Version von Visual Studio verwenden Sie? Ich verwende Version 2.0.0.0 von WebMatrix und Visual Studio 2013 RC.
Update (25.10.2013)
Ich setzte mein Experiment mit dem Hinzufügen von SimpleMembership zu einem MVC 5-Projekt fort und irgendwo auf der Linie brach es und ich erhielt die gleichen Ergebnisse wie @Sixten Otto. Ich habe nicht inkrementell getestet, als ich Dinge hinzugefügt habe, aber ich bin misstrauisch, dass dies möglicherweise passiert ist, als ich die Web-API-Assemblys installiert habe. Sie werden beim Erstellen eines neuen MVC 5-Projekts nicht standardmäßig installiert.
Ich habe den Fehler weiter untersucht und bin auf diese Qualitätssicherung mit dem Titel " Versuch durch transparente Sicherheitsmethode 'WebMatrix.WebData.PreApplicationStartCode.Start ()' " gestoßen . Dies ist eine alte Qualitätssicherung, und ursprünglich hat jemand denselben Fehler beim Upgrade einer MVC 3-App auf MVC 4 erhalten. In letzter Zeit haben jedoch Leute Antworten zum Upgrade auf MVC 5 hinzugefügt, und eine der Antworten hat für mich funktioniert. Die Lösung für mich war die Installation des NuGet-Pakets Microsoft.AspNet.WebHelpers . Nach der Installation dieses Pakets hat alles gut funktioniert.
Ein Hinweis zu meinen Untersuchungen zur Migration auf die neue ASP.NET-Identität ist, dass sie nicht denselben Kennwort-Hash verwenden, was das Verschieben alter Mitglieder in eine von ASP.NET Identity verwendete Datenbank ausschließt. ASP.NET Identity scheint sich derzeit in einem echten Wandel zu befinden. Vielleicht werden sie eine Lösung dafür finden.
Update (16.02.14)
Ich habe fälschlicherweise berichtet, dass der Hash-Algorithmus für Kennwörter in SimpleMembership und ASP.NET Identity unterschiedlich war. Ich nahm dies basierend auf einer visuellen Überprüfung der Hash-Passwörter an, wobei angenommen wurde, dass nur das Hash-Passwort in den Feldern war. Nach weiteren Recherchen stellte ich fest, dass SimpleMembership die System.Web.Helpers.Crypto-Klasse zum Hashing des Kennworts verwendet und dass im Kennwortfeld ein 256-Bit-Unterschlüssel und das Salt gespeichert sind. Mit diesen Informationen habe ich einige Tests durchgeführt, um zu überprüfen, ob ASP.NET Identity Kennwörter überprüfen kann, die von SimpleMembership generiert wurden, und die bestanden wurden. Ich habe versucht herauszufinden, welcher Hash-Algorithmus SimpleMembership verwendet, damit ich einen Kennwort-Hash in ASP.NET Identity einfügen kann, mit dem ich Daten von einer SimpleMembership-Webiste auf eine mit ASP.NET Identity verwendete Webiste migrieren kann.In diesem Artikel werde ich ausführlicher auf den Kennwort-Hash und die Migration der Daten von SimpleMembership zu ASP.NET Identity eingehen .
quelle
Wenn Sie den Fehler erhalten
Um dies zu beheben, installieren Sie dieses Paket mit dem NuGet-Paketmanager.
Danach erhalten Sie wahrscheinlich einen weiteren Fehler
Um dies zu beheben, installieren Sie dieses Paket mit dem NuGet-Paketmanager.
quelle
Wir arbeiten derzeit an einem Migrationsdokument für die Migration von Simple Membership zu ASP.NET Identity. Bitte bleiben Sie ein paar Wochen auf dem Laufenden, bis wir dieses Migrationsdokument veröffentlichen. Im Moment müssen Sie Ihr einfaches Mitgliedschaftsschema der Identität zuordnen und Ihren Anwendungscode ändern, um OWIN für SignIN / SIgnOut zu verwenden
quelle
Die obigen Antworten funktionierten erst auf den letzten Webseiten 3.2.3. Eine neue Ausgabe ist für mich aufgetaucht. Das aktuelle Update für mich war das Upgrade auf .Net 4.5.3. Ich habe das aus Frustration herausgefunden. Dieses Problem betrifft nicht nur MVC 5, sondern auch Kern-Webmatrix-Projekte nach dem Upgrade auf Webseiten 3.2.3. Ich denke, es ist ein Framework-Problem, das mit der neuen Microsoft Identity behoben wird. Das aktuelle Update für mich ist unten aufgeführt: Hinweis: Verwenden Sie den Eigenschaftenseiten-Assistenten in Visual Studio, um Ihr Zielframework in .Net Framework 4.5.3 zu ändern. Es wird Ihre web.config aktualisieren
<compilation debug="true" targetFramework="4.5.3"> <assemblies> <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </assemblies> </compilation>
Schritt 1: Installationspaket Microsoft.AspNet.WebHelpers
Schritt 2: Installationspaket Microsoft.AspNet.WebPages.Data
Schritt 3: [Optional] Install-Package Owin
Schritt 4: Ändern Sie targetFramework über das Dialogfeld Eigenschaftenseiten in .Net 4.5.3
[Optional] Ihre Web.Config sollte wie folgt aussehen
<?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings> <add connectionString="Server=XTREMEGOSPEL;Database=portfolioDB;Trusted_Connection=True" name="portDB" providerName="System.Data.SqlClient"/> </connectionStrings> <!-- For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367. The following attributes can be set on the <httpRuntime> tag. <system.Web> <httpRuntime targetFramework="4.5" /> </system.Web> --> <system.web> <compilation debug="true" targetFramework="4.5.3"> <assemblies> <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </assemblies> </compilation> <httpRuntime targetFramework="4.5" maxRequestLength="2097151"/> <authentication mode="Forms"> <forms timeout="1440"/> </authentication> <sessionState timeout="1440"/> <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> </system.web> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="4294967295"/> </requestFiltering> </security> </system.webServer> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
quelle
Ich habe das gleiche Problem, nicht an meinem lokalen Computer, aber die Live-Site hatte das.
Ich habe die folgenden Zeilen aus der Webkonfiguration entfernt und es funktioniert jetzt.
<dependentAssembly> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly>
quelle