我有一个使用ASP.NET Identity(Invidual用户帐户)的MVC 5项目。作为数据库ORM,我使用的是实体框架6,IoC由Ninject负责。
解决方案结构遵循
- MVC项目--拥有我的控制器、视图和ninject设置。对于Ninject,我从nuget得到了Ninject.MVC3
- 数据项目---具有我的DataContext(IdentityDbContext)和ApplicationUser(Identity User)。我的数据服务和所有存储库
- 核心项目--拥有我的所有实体和接口
[Authorize]
属性工作正常,我必须登录才能访问带注释的操作,但当我设置[Authorize(Roles = "Admin")]
时,我会得到
找不到存储过程"dbo.aspnet_CheckSchemaVersion"。
我在CustomAuthorize上创建了一个attibute,它基本上是Authorize的副本,并注意到protected virtual bool AuthorizeCore(HttpContextBase httpContext)
User.ProviderName中的httpcontext为"AspNetSqlRoleProvider"。
所以我在web.config中添加了Rolemanagers clear。这导致了
配置错误描述:在处理为该请求提供服务所需的配置文件。请查看下面的具体错误详细信息,并修改您的配置文件。
分析器错误消息:找不到默认角色提供程序。
来源错误:
第53行:-->第54行:第55行:行56:第57行:
源文件:…myproject\WebUI\web.config线路:55
这是怎么回事?如何将默认角色提供程序设置为使用ASP.NET标识?
所以在我发布问题后,我就找到了答案。我不得不添加
<system.webServer><模块>。。。<remove name="RoleManager"/><模块><system.webServer>
的确如此,但为什么呢?