When testing locally on your dev machine not on the host, you may be able to create accounts just fine. However, after you load your site to your host, you may get the error
To call this method, the “Membership.Provider” property must be an instance of “ExtendedMembershipProvider”
You think to yourself "Self, why am I getting this error when this worked on my dev machine not more than a few moments ago?" The answer is interesting.
The error is happening because of this code located in the WebSecurity file of the WebMatrix.WebData dll -
private static ExtendedMembershipProvider VerifyProvider()
ExtendedMembershipProvider provider = Membership.Provider as ExtendedMembershipProvider;
What is the significance of this? That Membership.Provider line is getting the membership information from your web.config and if you have not configured your system to use a provider that extends the ExtendedMembershipProvider class, the provider will not match and your application will not work. The first step to solving this problem is to add the following line to your web.config file -
<add key="enableSimpleMembership" value="true" />
However, in some cases, your website host settings are actually going to override that setting in your web.config! That's right - your host configuration is going to override your own. This means that the setting above will be ignored and if your host is implementing a provider that is NOT an extension of the ExtendedMembershipProvider, you are going to experience the error. This happens because NONE of the old providers used with prior versions of Asp.Net/Asp.Net MVC are extensions of ExtendedMembershipProvider.
So how do you solve this problem?
Place the following code in your web.config file of the website you are hosting.
<system.web>This will override your host's settings for your website and get your website working!
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=18.104.22.168, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />