wyłącznie jako punkt odniesienia, to może być dobry pomysł, aby utworzyć nowy szablon aplikacji internetowej danego projektu aplikacji ASP.NET MVC 4 Web (czyli poprzez Plik> Nowy projekt).
Jeśli spojrzeć na AccountController
, jak mówi @ zms6445, jest on ozdobiony atrybutem InitializeSimpleMembership
. Implementację tego atrybutu można znaleźć w pliku InitializeSimpleMembershipAttribute.cs w folderze Filtry w katalogu głównym.
Tutaj brakuje brakującej części układanki - musisz podłączyć istniejącą bazę danych, aby była używana przez SimpleMembershipProvider
. Jest to kod trzeba:
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
try
{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Something is wrong", ex);
}
}
}
kilka rzeczy do uwaga:
CONNECTION_STRING_NAME
jest wpis w swoim connectionStrings web.config - nie można użyć ciąg połączenia modelu tutaj - w SimpleMembershipProvider
nie rozpoznać ten format! Musisz podać ciąg połączenia System.Data.SqlClient
, np.
< dodaj nazwę = "CONNECTION_STRING_NAME" connectionString = "źródło danych = SERVER, początkowy katalog = DATABASE; identyfikator użytkownika = USER; hasło = PASSWORD;" providerName = „System.Data.SqlClient”/>
USER_TABLE
jest tabela w bazie danych do przechowywania dodatkowych informacji użytkownika, takich jak imię, nazwisko itd. Wiąże się to automatycznie wygenerowany tabelach pośrednictwem USER_ID_FIELD.
USER_ID_FIELD
jest zwykle kluczem podstawowym w tabeli Użytkownicy. Musi być typu int
.
USER_ID_NAME
to unikalna nazwa użytkownika, która może być adresem e-mail.
autoCreateTables
jest ustawiony na true
celu zapewnienia tabele wymagane do SimpleMembership do pracy są tworzone, jeśli nie istnieją.
Oczywiście, ten kod tylko zostanie zwolniony, jeśli trafisz na stronę za pośrednictwem AccountController
, ponieważ ten został urządzony przez atrybut. Możesz umieścić tam punkt przerwania i zobaczyć go w akcji.
To powinno wystartować - szablon aplikacji internetowej to całkiem niezły szablon do naśladowania, jeśli utkniesz.
Mam nadzieję, że to pomoże.
Postępowałem zgodnie z twoją instrukcją, ale dostałem wyjątek TargetInvocationException od LazyInitializer. Masz pomysł? –
Znalazłem :) Zapora serwera SQL jest przyczyną tego błędu! Nienawidzę zapór ogniowych :) –
@ UmutCanKöseali Myślę, że mam ten sam problem, w jaki sposób wyłączyć zaporę sql? – Cybercop