您必须调用“WebSecurity.InitializeDatabaseConnection”

时间:2012-12-30 10:57:23

标签: asp.net-mvc-4 entity-framework-5 membership-provider

使用[Authorize(Roles =“admin”)]属性时遇到问题。

[Authorize(Roles = "admin")]
    public ActionResult GetAllLocations()
    {

我收到以下错误

  

您必须调用“WebSecurity.InitializeDatabaseConnection”方法   在调用“WebSecurity”类的任何其他方法之前。这个电话   应放在站点根目录中的_AppStart.cshtml文件中。

我首先使用EF 5 Code使用我自己的数据库构建了一个MVC 4应用程序。

一点背景:

  • 我创建了一个继承自的自定义成员资格提供程序 的MembershipProvider

  • 我在本网站上看到了很多关于这个问题的问题,但是 没有找到答案。

  • 在某些答案中,我了解了如何禁用会员提供商

像这样:

    <add key="enableSimpleMembership" value="false"/>
    <add key="autoFormsAuthentication" value="false"/>

这就是我实现自定义成员资格提供程序的方式

 <membership defaultProvider="ATWMembershipProvider">
  <providers>
    <clear/>
    <add name="ATMMembershipProvider" type="AroundTheWorldWeb.Infrastructure.AuthenticationProvider.ATMMembershipProvider"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         equiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5"
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10" applicationName="myApplication" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
  <providers>
    <remove name="AspNetSqlRoleProvider" />
    <add name="AspNetSqlRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <!-- note: WebMatrix registers SimpleRoleProvider with name
     'AspNetSqlRoleProvider'. I don't know why but i kept it. -->
  </providers>
</roleManager>

1 个答案:

答案 0 :(得分:0)

我通过从模板创建MVC 4来解决这个问题。我认为在选择Empty模板时没有加载某些DLL。所以我从模板创建它并覆盖所有Account的方法并且还实现了自定义成员和角色提供程序