13

我在使用 MVC 5 中的新身份系统时遇到问题,我的目标是在 Views 上使用 User.IsinRole("RoleName")。例如:

@if(User.IsInRole("Administrator"))
 {
   <li>@Html.ActionLink("Admin", "Index", "Admin")</li>
 }

这放置在应用程序启动时点击的主布局页面中。在这样做时,我收到以下错误:

“System.Web.dll 中发生了‘System.Web.HttpException’类型的异常,但未在用户代码中处理

附加信息:无法连接到 SQL Server 数据库。”

我已经到处寻找解决方案,常见的解决方案是在控制器顶部包含“[InitializeSimpleMembership]”或在应用程序启动时手动初始化数据库连接。(使用 WebSecurity.InitializeDatabaseConnection)。这两种方法似乎都没有被 MVC 5 识别。

我还尝试通过在任何时候通过使用 Aspnet.Identity.UserManager 来确定角色来返回视图以使用 IsAdmin 布尔值填充 ViewBag 来创建一堆凌乱的代码来解决此问题。虽然这行得通,但这不是我觉得我应该做的事情的方式。

可能值得注意,但我在后端访问 User.IsInRole 时没有遇到这些问题,这绝对是一个初始化问题。

4

3 回答 3

23

我遇到了同样的问题,但是 Stunt 的回答对我不起作用。尝试了这个问题的答案并解决了这个问题。

对于懒惰的人,您可以尝试将其添加到您的 web.config 文件中:

 <system.webServer>
    <modules>
      <remove name="RoleManager" />
    </modules>
  </system.webServer>
于 2013-12-27T09:06:18.553 回答
3

我设法通过从我的 Web Config 中删除以下行来解决这个问题:

<roleManager enabled="true" />

这是在查看以下示例代码中的逐行比较时发现的:

https://github.com/rustd/AspnetIdentitySample/tree/master/AspnetIdentitySample

于 2013-11-24T15:24:25.717 回答
0

在应用程序启动时创建数据库。在您的 dbcontext 中添加以下 Global.ascx。

using (FooContext db = new FooContext()) 
        {
            db.Database.CreateIfNotExists();
        }
于 2014-01-30T18:26:16.293 回答