puramente come un punto di riferimento, potrebbe essere una buona idea per creare un nuovo modello Internet Application di un progetto di applicazione Web ASP.NET MVC 4 (cioè tramite File> Nuovo progetto).
Se si guarda il AccountController
, come dice @zms6445, è decorato con un attributo InitializeSimpleMembership
. È possibile trovare l'implementazione di questo attributo nel file InitializeSimpleMembershipAttribute.cs nella cartella Filters all'interno della directory root.
Qui, questa è la parte mancante del puzzle: è necessario collegare il database esistente in modo che venga utilizzato dallo SimpleMembershipProvider
. Questo è il codice è necessario:
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);
}
}
}
Alcune cose da notare:
CONNECTION_STRING_NAME
è una voce nel vostro ConnectionStrings web.config - Non è possibile utilizzare la stringa di connessione modello di qui - il SimpleMembershipProvider
non lo fa riconosci questo formato! Devi specificare una stringa di connessione System.Data.SqlClient
, ad es.
< add name = "CONNECTION_STRING_NAME" connectionString = "origine dati = SERVER; catalogo iniziale = DATABASE; ID utente = UTENTE; password = PASSWORD;" providerName = "System.Data.SqlClient"/>
USER_TABLE
è la tabella nel database per contenere le informazioni dell'utente in più, come ad esempio nome, cognome ecc Questo è legato alle tabelle generati automaticamente tramite l'USER_ID_FIELD.
USER_ID_FIELD
è in genere la chiave primaria della tabella Utenti. Deve essere di tipo int
.
USER_ID_NAME
è un nome univoco per l'utente, che potrebbe essere un indirizzo di posta elettronica.
è impostato su true
per garantire che le tabelle richieste per il funzionamento di SimpleMembership vengano create se non esistono già.
Naturalmente, questo codice solo s'incendia se si colpisce una pagina tramite il AccountController
, dal momento che questo è stato decorato dal attributo. Potresti inserire un punto di interruzione e vederlo in azione.
Questo dovrebbe iniziare: il modello di applicazione Internet è un modello piuttosto buono da seguire se rimani bloccato.
Spero che questo aiuti.
fonte
2013-03-05 21:04:12
Ho seguito le tue istruzioni ma ottengo una TargetInvocationException da LazyInitializer. Qualche idea al riguardo? –
L'ho trovato :) Il firewall del server SQL causa l'errore! Odio i firewall :) –
@ UmutCanKöseali Penso di avere lo stesso problema, come disattivare il firewall sql? – Cybercop