InitializeSimpleMembership过滤器问题

时间:2013-05-21 09:07:09

标签: asp.net-mvc-4 simplemembership action-filter

我有MVC 4应用程序,开箱即用的简单成员资格机制。最近我发现每次调用我的应用程序中的任何控制器都会执行InitializeSimpleMembershipAttribute过滤器中的OnActionExecuting方法!即使我在Account控制器上注释掉了InitializeSimpleMembership属性,如下所示:

[Authorize]
//[InitializeSimpleMembership]
public class AccountController : Controller
{

过滤器仍然被调用!这个电话来自哪里?

2 个答案:

答案 0 :(得分:1)

如果有,请检查 _AppStart.cshtml 文件。或者搜索初始化成员资格的代码。它可能看起来像这样:

if (!WebSecurity.Initialized)
{
    WebSecurity.InitializeDatabaseConnection("UserConnectionString", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}

答案 1 :(得分:1)

我通常会删除默认情况下位于Filters文件夹中的InitializeSimpleMembership文件。你希望它在启动时初始化一次,所以最好的地方是Global.asax

现在为了保持global.asax中application_start()方法的结构一致,我将它添加到该方法调用的配置文件中。你可以创建一个新的,但我通常只是将它添加到AuthConfig。 AuthConfig具有默认的OAuth代码,因此将所有身份验证方法保持在一起是有意义的。

调用RegisterAuth中的方法在启动时由global.asax调用一次。只需添加

//Local Authentication
            WebSecurity.InitializeDatabaseConnection("MyDbConnection", "UserProfile", "UserId", "UserName", autoCreateTables: false);

您将在构建时遇到一些错误,这些错误通过删除引用filters文件夹的语句(可能仅在您有resharper时)并删除InitializeSimpleMembership属性(不再需要)来解决。

在我的示例中,我将autoCreateTables设置为false,因为我在我的解决方案中使用了数据库项目。如果您使用其他方法(如代码优先),则可能需要将其设置为true