2013-04-01 27 views
38

現在、私はホストプロバイダDiscountASPでASP.Net MVC4に組み込まれたデフォルトメンバーシップサービスを使用してユーザーを登録するか、エラーを受け取るこのメソッドを呼び出すには、 "Membership.Provider"プロパティが "ExtendedMembershipProvider"のインスタンスである必要があります

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

これはローカルでは発生しません。ここで

は私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); 
      } 
     } 
    } 
} 

は、エラーのスクリーンショットです:

私はこれを修正したり、それを扱う記事を知ることができますどのように誰もが知っていますか?

+1

の下でログイン機能を変更しようと、あなたは、web.configファイルの '' 部分を表示することができますか? SimpleMembershipを使用しようとしているようですが、プロバイダが一致していないようです。また、 'WebMatrix。*'が参照のプロパティの下で 'Copy Local = True'に設定されていることを確認してください。 –

+0

私は実際に何らかの理由でWeb.configでメンバーシップセクションを定義していません。どのように見えるか教えていただけますか? –

答えて

63

<system.web>ノード内のあなたのweb.configにアップし、次の設定を試してみてください。

<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> 

をあなたがそれを使用するために行くときSimpleMembershipが認識されないように聞こえます。

また、それは含めて価値があるかもしれ、WebMatrix.webDataライブラリがNuGet経由でインストールすることができます。

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

ありがとう、これは素晴らしい仕事でした! –

+0

喜んで助けてください! ;-) –

+0

コードの4行目で、サーバーエラーが発生しました: "ファイルまたはアセンブリ 'WebMatrix.WebData'またはその依存関係の1つを読み込めませんでした。指定されたファイルが見つかりません。原因は何か? – pt12lol

1

私は同じエラーを持っていたが、それは私のために100%のリファレンスでした。私は、WebMatrix.WebSecurityを何度か動作させるのに問題がありました...毎回、MVC 4インターネットテンプレートを使用してプロジェクトを作成しなかったためです。

重要な点は、テンプレートで参照と設定がデフォルトで機能するということです。プロジェクトを再作成すれば問題ありません。

私の修正は です。1.プロジェクトを別のフォルダにバックアップします。 2.すべてのファイルをチェックアウト 3.全く同じ名前で新しいMVC 4インターネットプロジェクトを作成します。 4.元のプロジェクトをコピー&ペースト(上書き)します。 5.欠落している参照、変更されたルート、.config設定/ DB接続を追加します。

+0

「インターネットテンプレート」とはどういう意味ですか?デフォルトでは、Visual Studioのmvc 4プロジェクトテンプレートは機能しませんか? –

+0

ああ、ローカルのASP.NET MVC 4プロジェクトテンプレートを選択し、次の画面で「インターネットアプリケーション」を選択することを意味すると思います。私は正しい?最初の考えは、あなたがmvc用のオンラインプロジェクトテンプレートを見つけてそれをインストールしていたからです。 –

3

上記の手順を実行しても効果がありませんでした。 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> 
6

は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); 
    } 
+0

ありがとう、その作品 – yozawiratama

+0

正解!これは、aspxページからMVCに移行する人にとっては偉大な修正です! – TomO

関連する問題