Hintergrund
ich auf einer RESTful API in C# /. NET geschrieben arbeite und muß zwischen der Produktionsdatenbank und Entwickler-Datenbank zum Testen neue API-Aufrufe wechseln. Die API des vorherigen Hauptentwicklers hat keinen Sinn ergeben, deshalb ersetzen wir die wichtigsten Teile davon, bevor wir die Anwendung von Grund auf neu erstellen.SqlMembershipProvider.CreateUser nicht mit invalidAnswer obwohl requiresQuestionAndAnswer = false
Das Tor
ich zum SqlMembershipProvider
für den dev-Datenbank-Server schnell umschalten muß CRUD-Operationen auf Benutzerkonten zu testen.
Das Problem
Die MSDN „Dokumentation“, sagt, dass die Membership.CreateUser
method calls SqlMembershipProvider.CreateUser
, aber diese zugrunde liegende Methode aufrufen direkt zurück null
und setzt die status
Ausgabe invalidAnswer
.
Konfiguration
Ich habe die Verbindungszeichenfolge und Provider-Definition konfiguriert in Web.config
:
<connectionStrings>
<add name="ConnString" connectionString="server=prodblahblah">
<add name="DevConnString" connectionString="server=devblahblah">
...
<membership defaultProvider="SQLDBMembershipProvider">
<providers>
<add name="SQLDBMembershipProvider" connectionStringName="ConnString" requiresQuestionAndAnswer="false" ...>
<add name="DevSQLDBMembershipProvider" connectionStringName="DevConnString" requiresQuestionAndAnswer="false" ...>
-Code
Basierend auf den Bits der Beratung I verstreut über das Internet kam ich und versuchte es die folgenden:
SqlMembershipProvider p = (SqlMembershipProvider)Membership.Providers["DevSQLDBMembershipProvider"];
MembershipCreateStatus status;
string question = "";
string answer = "";
MembershipUser mu = p.CreateUser(username, password, email, question, answer, true, Guid.NewGuid(), out status);
Ergebnis
Der Aufruf liefert null und setzt den Ausgang status
Variable invalidAnswer
. Das verwirrt mich, weil requiresQuestionAndAnswer
in der Konfiguration auf false
festgelegt ist und Membership.CreateUser
0 Werte in der aspnet_Membership
-Tabelle aufruft.
Merkwürdigerweise habe ich das gleiche Ergebnis, wenn Membership.Providers["SQLDBMembershipProvider"]
statt ["DevSQLDBMembershipProvider"]
verwenden, so muss es ein Unterschied zwischen der Art und Weise, dass Membership.CreateUser
und SqlMembershipProvider.CreateUser
Griff Passwort Fragen/Antworten.
Kleiner Rant über MSDN „Dokumentation“
Das Codebeispiel für SqlMembershipProvider.CreateUser in der MSDN-Dokumentation gegeben noch nicht einmal wirklich zeigen, wie SqlMembershipProvider.CreateUser
verwenden - es Membership.CreateUser
stattdessen ruft und erwähnt nicht, wie die nicht zugreifen Standardanbieter, die in der Datei Web.config konfiguriert sind. Das Codebeispiel in der Dokumentation für eine Methode zeigt speziell nicht, wie diese Methode verwendet wird. Ich denke, es ist fair zu sagen, dass MSDN die erschreckend wenig hilfreiche Dokumentation hat, die ich je gesehen habe.
Frage
Warum Membership.CreateUser
Arbeit mit leeren Passwort Frage/Antwort-Werte während SqlMembershipProvider.CreateUser
nicht der Fall ist? Wie arbeite ich das an?