Использование MVC 5 IsInRole в Razor Views: не удается подключиться к базе данных
У меня возникают проблемы с использованием новой системы идентификации в MVC 5, моя цель - использовать User.IsinRole( "RoleName" ) в Views. Например:
@if(User.IsInRole("Administrator"))
{
<li>@Html.ActionLink("Admin", "Index", "Admin")</li>
}
Это помещается на главную страницу макета, которая попадает при запуске приложения. При этом я получаю следующую ошибку:
"Исключение типа" System.Web.HttpException "произошло в System.Web.dll, но не было обработано в коде пользователя
Дополнительная информация: невозможно подключиться к базе данных SQL Server. "
Я нашел поиск высокого и низкого для решения этого вопроса, общим решением является либо включение "[InitializeSimpleMembership]" в верхней части контроллера, либо инициализация соединения с базой данных вручную при запуске приложения. (С помощью WebSecurity.InitializeDatabaseConnection). Оба этих метода, похоже, не распознаются MVC 5.
Я также попытался обойти это, создав кучу беспорядочного кода в любое время, когда я возвращаю представление, чтобы заполнить ViewBag с помощью логина IsAdmin, используя Aspnet.Identity.UserManager для определения ролей. Хотя это работает не так, как я чувствую, что должен делать что-то.
Возможно, стоит отметить, но я не испытываю этих проблем с доступом к User.IsInRole на бэкэнд, это определенно кажется проблемой инициализации.
Ответы
Ответ 1
У меня была такая же проблема, однако ответ Трюка не работал на меня. Пробовал ответ на этот вопрос и решил эту проблему.
Для ленивых вы можете попробовать добавить это в свой файл web.config:
<system.webServer>
<modules>
<remove name="RoleManager" />
</modules>
</system.webServer>
Ответ 2
Мне удалось обойти проблему, удалив из моей веб-конфигурации следующую строку:
<roleManager enabled="true" />
Это было обнаружено при поиске сравнения строки для строки в следующем примере кода:
https://github.com/rustd/AspnetIdentitySample/tree/master/AspnetIdentitySample
Ответ 3
Создайте базу данных при запуске приложения. Добавьте в файл Global.ascx следующее: dbcontext.
using (FooContext db = new FooContext())
{
db.Database.CreateIfNotExists();
}