我看到了完全相同的问题,可以将其追溯到浏览器中的 .ASPXAUTH 会话 cookie。删除该 cookie,数据库错误就会消失,直到下一次重建。
如果您通过身份验证,然后重新构建项目并尝试浏览以下任一页面,则该错误会定期发生:
- 需要身份验证
- 调用 User 对象(例如
@if (User.IsInRole("Administrators"))
)
如果您在 App_Start/FilterConfig.cs 中设置了 AuthorizeAttribute 过滤器,您将在每个页面上都看到它。
这似乎是最新补丁星期二更新后的新行为。以前,我看到奇怪的行为,我会保持登录状态,但我会失去我的滚动会员资格。在最近的补丁之后,似乎 Simple Membership 在收到错误的 .ASPXAUTH cookie 时会阻塞(由于重建而无效)。
我在 InitializeSimpleMembershipAttribute.cs 中有正确的连接字符串,但在这个实例中,就像简单成员默认为其他东西一样。
请注意,我已将 Simple Membership 数据库从原始 (localDb) 移动到成熟的(本地)SQL Server 实例。不知道为什么这很重要,并且在所有其他情况下都可以正常工作。
更新:
我还尝试使连接字符串名称与 EF 上下文名称(例如“ProjectContext”)相同,理论上它默认为标准约定,但这并没有什么区别。我在所有上下文类构造函数中明确识别连接字符串名称(使用: base("connectionString")
语法),并且简单成员能够在所有其他时间找到正确的连接字符串。
更新 2:
只有在访问受角色保护的页面时重建后才会出现此问题。一个简单的[Authorize]
不会触发它。你需要类似的东西[Authorize(Role="Admin")]
。我已经在一个新的 MVC 4 项目上复制了这个,没有其他修改,使用默认的 (localDb) 数据库。清除 cookie,同一用户可以访问受保护的内容而不会出现任何问题。我相信这是一个核心 .NET 或 MVC 错误,需要这样报告。