3

我的 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 过滤器会在应用程序启动时发布?

4

1 回答 1

3

我将消除本文中讨论的 InitializeSimpleMembership 的使用。将初始化移至 Global.asax Application_Start 方法并在那里进行初始化,以便它以正确的顺序发生。

于 2013-05-20T18:15:27.123 回答