0

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

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

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

4

2 回答 2

1

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

if (!WebSecurity.Initialized)
{
    WebSecurity.InitializeDatabaseConnection("UserConnectionString", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
于 2013-05-21T09:14:27.527 回答
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);

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

在我的示例中,当我在解决方案中使用数据库项目时,我将 autoCreateTables 设置为 false。如果您使用另一种方法,例如代码优先,您可能希望它为真

于 2013-05-21T09:35:42.747 回答