Asp.net mvc 4 如何在ASP.NET MVC4中初始化简单成员身份

Asp.net mvc 4 如何在ASP.NET MVC4中初始化简单成员身份,asp.net-mvc-4,authentication,asp.net-membership,simplemembership,targetinvocationexception,Asp.net Mvc 4,Authentication,Asp.net Membership,Simplemembership,Targetinvocationexception,如何在ASP.NET MVC4中初始化简单成员身份 嗨,我正在使用ASP.NET MVC4。 如您所知,ASP.NET MVC4中禁用了成员资格/身份验证机制; 如果我们想启用它,我们需要: 1) 编辑以下行(在类SimpleMembershipInitializer的构造函数中,文件InitializeSimpleMembershipAttribute.cs) 2) 在Web.Config节中为添加新密钥 <appSettings> <add key="enableS

如何在ASP.NET MVC4中初始化简单成员身份

嗨,我正在使用ASP.NET MVC4。 如您所知,ASP.NET MVC4中禁用了成员资格/身份验证机制; 如果我们想启用它,我们需要:

1) 编辑以下行(在类SimpleMembershipInitializer的构造函数中,文件InitializeSimpleMembershipAttribute.cs)

2) 在Web.Config节中为添加新密钥

<appSettings>
    <add key="enableSimpleMembership" value="true" />
    ...
</appSettings>
没什么奇怪的,正如你所看到的。 我还尝试在global.asax.cs文件中移动,正如这里所建议的,但即使如此,我还是得到了相同的异常

我没有特殊要求:我只想登录我的MVC4应用程序,就像我以前编写的MVC3应用程序一样。

谁能告诉我哪里出了错

谢谢


好的,我假设您想使用现有用户表,对吗?“DefaultConnection”是您的连接字符串吗?我想不会吧。因此,您应该使用连接字符串

最初,我还遇到了初始化问题,所以我宁愿放弃过滤器,直接在global.asax中通过

if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("YOUR_DB_CONTEXT", "USER_TABLE", "ID_COLUMN", "USERNAME_COLUMN", true);
            }

我发布了关于设置它的教程。我想这对你有帮助。

嗨@Lokesh,谢谢你的回复。是的,我的“DefaultConnectionString”应该是对的。你有没有试着抛弃过滤器并直接初始化它?是的,我的“DefaultConnectionString”应该是正确的。我在帖子中添加了一些编辑:它是“应该是”吗?。现在我有三个小问题:a)通过添加提供者来修改System.web是强制性的吗?我读过的所有教程都没有提到这一点!b) 在实践中,ASP.NET MVC 4“简单成员身份”和普通“本地登录”之间的区别是什么?c)其中-即,在哪种方法中-应称为WebSecurity.CreateUser(“用户名”、“密码”)?a) 我不确定这一点,但我猜有必要指定成员资格提供程序以及连接字符串。我还学习了很多教程,发现这个设置可以正常工作。b) 我猜“本地登录”是指.net会员资格,对吗?所以有很多不同之处,但主要是简单的成员身份让我们为用户使用您的数据库表,这将产生更好的用户配置文件和单个数据库。
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-SimpleAuthenticationMvc4-20140209174604;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
  </connectionStrings>
/* class MyApp.Filters.InitializeSimpleMembershipAttribute */

namespace MyApp.Filters
{
    [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
            // HERE i _always_ get TargetInvocationException
            LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
        }

        private class SimpleMembershipInitializer
        {
            public 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();
                        }
                    }

                    /* DefaultConnection and table 'users' should/seems to be OK */
                    WebSecurity.InitializeDatabaseConnection("DefaultConnection", "users", "id", "username", autoCreateTables: true);

                }
                catch (Exception ex)
                {
                    ...
                }
            }
        }
    }
}
/* file global.asax.cs */

namespace MyApp
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
        }
    }
}
if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("YOUR_DB_CONTEXT", "USER_TABLE", "ID_COLUMN", "USERNAME_COLUMN", true);
            }