39 votes

Pour appeler cette méthode, la propriété "Membership.Provider" doit être une instance de "ExtendedMembershipProvider".

Actuellement, chaque fois que j'essaie de vous inscrire ou de vous connecter en utilisant le défaut d'adhésion des services intégrés ASP.Net MVC4 sur mon hébergeur DiscountASP, je reçois l'erreur

Pour appeler cette méthode, le "Membership."Fournisseur de biens doit être une instance de "ExtendedMembershipProvider".

Cela ne se fait localement.

Voici mon InitializeSimpleMembershipAttribute.cs:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
    private static SimpleMembershipInitializer _initializer;
    private static object _initializerLock = new object();
    private static bool _isInitialized;

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Ensure ASP.NET Simple Membership is initialized only once per app start
        LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
    }

    private abstract class SimpleMembershipInitializer
    {
        protected SimpleMembershipInitializer()
        {
            Database.SetInitializer<UsersContext>(null);

            try
            {
                using (var context = new UsersContext())
                {
                    if (!context.Database.Exists())
                    {
                        // Create the SimpleMembership database without Entity Framework migration schema
                        ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                    }
                }

                WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
            }
        }
    }
}

Voici une capture d'écran de l'erreur:

Personne ne sait comment je peux résoudre ce problème ou sait d'un article qui traite de ça?

63voto

Brad Christie Points 58505

Essayez de définir les paramètres suivants dans votre nœud web.config dans le nœud <system.web> :

     <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
        <providers>
            <clear />
            <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
        </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
        <providers>
            <clear />
            <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
        </providers>
    </membership>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
        <providers>
            <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
        </providers>
    </sessionState>
 

On dirait que SimpleMembership n'est pas reconnu quand vous allez l'utiliser.

En outre, il peut être intéressant d’inclure, la bibliothèque WebMatrix.webData peut être installée via NuGet:

 PM> Install-Package Microsoft.AspNet.WebPages.WebData
 

7voto

Tarik Points 55

Essayez de changer la fonction de connexion sous AccountController.cs

         //
    // POST: /Account/Login

    [AllowAnonymous]
    [HttpPost]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }
 

3voto

Kolya Evdokimov Points 61

Avez-étapes ci-dessus, mais cela n'a pas aidé. Ce qui a aidé a été de changer web.config:

       <dependentAssembly>
    <assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
          <dependentAssembly>
    <assemblyIdentity name="WebMatrix.WebData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
 

1voto

Robert J. Good Points 21

J'ai eu la même erreur, mais il a été de 100% des références pour moi. J'ai eu du mal à me WebMatrix.WebSecurity de travail plusieurs fois...à chaque fois est parce que je n'ai pas créer le projet à l'aide de la MVC 4 Internet modèle.

La clé est que les références et la config de travail par défaut dans le modèle, il suffit donc de recréer votre projet et ce sera très bien.

Ma solution est: 1. Sauvegarder mon projet dans un autre dossier. 2. Découvrez tous les fichiers 3. Créer un nouveau MVC 4 projet Internet, sous le même nom. 4. Copier + Coller (écraser) le projet d'origine. 5. Ajouter toutes les références manquantes, changé itinéraires .paramètres de configuration de/DB connections.

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