2013-03-17 3 views
2

У меня есть следующий код Asp.Net MVC 4, и он вызывает ошибку в строке 18 контроллера DealController. Прямо сейчас это происходит только после того, как я перестроил проект, когда я отлаживаю использование VS 2012 на локальном ПК.Должен вызывать метод «WebSecurity.InitializeDatabaseConnection» раньше?

Line 16: private IQueryable<Deal> Deals 
Line 17: { 
Line 18: get { return User.IsInRole("Admin") ? _db.Deals : _db.Deals.Where(d => d.CreatedBy == User.Identity.Name); } 
Line 19: } 

Вы должны вызвать метод «WebSecurity.InitializeDatabaseConnection» перед вызовом любой другой метод класса «WebSecurity». Этот вызов должен быть помещен в файл _AppStart.cshtml в корень вашего сайта.

Должен ли я добавить атрибут [InitializeSimpleMembership] на всех контроллерах, которые называет User.IsInRole() или User.Identity.Name? Прямо сейчас он добавляется только на AccountController.

+0

Возможный дубликат [Вы должны вызвать метод «WebSecurity.InitializeDatabaseConnection», прежде чем вы вызовете какой-либо другой метод класса «WebSecurity»] (http://stackoverflow.com/questions/13128218/you-must-call-the -websecurity-initializedatabaseconnection-method-before-you-c) – hjpotter92

ответ

7

Добавление [InitializeSimpleMembership] для контроллера решило проблему.

+0

Это не правильное решение. Потому что, если у вас есть следующий код: [Авторизоваться] [InitializeSimpleMembership] общественного класса AccountController: Контроллер { // ...} В качестве фильтра действий, ISMA крючки в OnActionExecuting для выполнения ленивых но это может быть слишком поздно в жизненном цикле. Тогда он будет разбиваться. Например, если у вас есть следующий код: [Авторизовать (Роли = «Продажи»)] – Rahatur

Смежные вопросы