【发布时间】:2013-11-21 03:10:33
【问题描述】:
我在使用 MVC 5 中的新身份系统时遇到问题,我的目标是在视图上使用 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 时没有遇到这些问题,这肯定是初始化问题。
【问题讨论】:
-
“无法连接到 SQL Server 数据库”是 ConnectionString 的问题。确保您有正确的连接字符串,并且您能够使用它连接到 Db。
-
User.IsInRole 在控制器上工作得非常好,这只发生在视图上。对我来说,这排除了连接字符串。
-
我无法重现您的问题。我从 VS2013 模板创建一个 MVC 应用程序,选择个人帐户并将您提供的代码添加到我的 _Layout.cs 文件中。工作正常。不需要任何特殊的初始化。您确定是 User.IsInRole 调用导致了异常吗?您是否检查了堆栈跟踪以找到它引发异常的确切位置?
-
Olav,我查看了堆栈跟踪,看起来它正在尝试创建本地数据库:“在 System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString)" 我与您的不同之处在于我已将 MVC 连接到本地 SQL2013 DB。这就是问题所在吗?
-
对不起,当然应该读 SQL2012,错字!
标签: sql-server asp.net-mvc authorization asp.net-mvc-5 asp.net-identity