我在MVC 5中使用新的身份系统时遇到问题,我的目标是在Views上使用User.IsinRole(" RoleName")。例如:
@if(User.IsInRole("Administrator"))
{
<li>@Html.ActionLink("Admin", "Index", "Admin")</li>
}
这是放置在应用程序启动时命中的主布局页面中。在这样做时,我收到以下错误:
&#34;类型&#39; System.Web.HttpException&#39;的例外情况发生在System.Web.dll中但未在用户代码中处理
其他信息:无法连接到SQL Server数据库。&#34;
我已经搜索了高低不同的解决方案,常见的解决方案是包括&#34; [InitializeSimpleMembership]&#34;在控制器的顶部或在应用程序启动时手动初始化数据库连接。 (使用WebSecurity.InitializeDatabaseConnection)。 MVC 5似乎都没有认识到这两种方法。
我还尝试通过使用Aspnet.Identity.UserManager确定角色,随时返回视图以使用IsAdmin布尔填充ViewBag来创建一堆乱码。虽然这是有效的,但这并不是我觉得我应该做的事情。
可能值得注意但是我在后端访问User.IsInRole时没有遇到这些问题,这肯定是一个初始化问题。
答案 0 :(得分:21)
我遇到了同样的问题,但Stunt的答案对我不起作用。尝试了this question的答案,解决了这个问题。
对于懒人,您可以尝试将其添加到您的web.config文件中:
<system.webServer>
<modules>
<remove name="RoleManager" />
</modules>
</system.webServer>
答案 1 :(得分:3)
我设法通过从我的Web配置中删除以下行来解决问题:
<roleManager enabled="true" />
在下面的示例代码中比较line for line时发现了这个:
https://github.com/rustd/AspnetIdentitySample/tree/master/AspnetIdentitySample
答案 2 :(得分:0)
在启动应用程序时创建数据库。使用dbcontext在Global.ascx中添加以下内容。
using (FooContext db = new FooContext())
{
db.Database.CreateIfNotExists();
}