Использование 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();
        }