在MVC 4中初始化简单成员关系



我有一个问题,我的MVC 4应用程序曾经工作得很好,但由于某种原因停止了,我找不到原因。我使用简单的会员提供程序和代码优先的方法。这是home控制器中的Index动作方法

[Authorize]
public class HomeController : Controller
{
    private IActivityRepository repo;
    public HomeController(IActivityRepository activityRepository)
    {
        repo = activityRepository;
    }
    //Allow anonymous to allow to create database if there isn't one yet
    [AllowAnonymous]
    public ActionResult Index()
    {
        repo.InitializeDatabase();       //!!!!!!!!!!!!!!!!!!!!!
        return RedirectToAction("ManageActivities");
    }

我的整个概念是,如果数据库不存在,它会在initializeddatabase方法中创建。然后用户被重定向到使用[authorization]属性装饰的ManageActivities操作方法,这实际上将用户带到accountcontroller中的登录操作方法(在MVC4中开箱即用)。这个控制器是用[InitializeSimpleMembership]装饰的,它会触发initializesimplemembershiattribute过滤器。

这个逻辑在我之前工作得很好。今天我想创建一个用于测试目的的新数据库。当我创建数据上下文时,我用数据库的自定义名称调用基类,如:

public class ActivityLogContext : DbContext
{
    public ActivityLogContext() : base("ActivitiesConnection")
    {
    }

所以我已经更改了连接字符串的详细信息并运行应用程序。不幸的是,由于某种原因,代码在从主控制器运行Index方法之前击中了InitializeSimpleMemebership过滤器(即使它用[AllowAnonymous]装饰)。实际上,简单的成员关系是初始化的,但数据库还不存在,这使我遇到了错误。

我的问题是,如果索引方法不需要授权,为什么InitializeSimpleMemebership过滤器在应用程序启动时被释放?

我将取消本文中讨论的InitializeSimpleMembership的使用。将初始化移动到全局。

最新更新