我的 MVC 4 应用程序有问题,它以前可以正常工作,但由于某种原因停止了,我不知道为什么。我使用简单的 memebrship 提供程序和代码优先的方法。这是我在家庭控制器中的索引操作方法
[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");
}
我的整个概念是,如果数据库不存在,它将在 InitializeDatabase 方法中创建。然后用户被重定向到用 [Authorize] 属性修饰的 ManageActivities 操作方法,实际上将用户带到 AccountCotroller 中的登录操作方法(在 MVC4 中开箱即用)。此控制器装饰有 [InitializeSimpleMembership],触发 InitializeSimpleMembershipAttribute 过滤器。
这个逻辑不久前对我来说很好用。今天我想创建一个用于测试目的的新数据库。当我创建数据上下文时,我使用数据库的自定义名称调用基类,如下所示:
public class ActivityLogContext : DbContext
{
public ActivityLogContext() : base("ActivitiesConnection")
{
}
因此,我更改了连接字符串的详细信息并运行了应用程序。不幸的是,由于某种原因,代码在从主控制器运行 Index 方法之前命中了 InitializeSimpleMemebership 过滤器(即使它用 [AllowAnonymous] 装饰)。实际上,简单的成员资格已初始化,但数据库尚不存在,这让我陷入了错误。
我的问题是,如果 Index 方法不需要授权,为什么 InitializeSimpleMemebership 过滤器会在应用程序启动时发布?