我有一个问题,我的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的使用。将初始化移动到全局。