我有MVC 4应用程序,开箱即用的简单成员资格机制。最近我发现每次调用我的应用程序中的任何控制器都会执行InitializeSimpleMembershipAttribute过滤器中的OnActionExecuting方法!即使我在Account控制器上注释掉了InitializeSimpleMembership属性,如下所示:
[Authorize]
//[InitializeSimpleMembership]
public class AccountController : Controller
{
过滤器仍然被调用!这个电话来自哪里?
答案 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