【问题标题】:Role Provider in SimplerMembershipSimplerMembership 中的角色提供者
【发布时间】:2013-10-21 15:28:23
【问题描述】:

我在 .NET Framework 4 项目中使用了标准的 VS 2012 MVC 4 Internet 模板。我主要使用外部登录(Google、Microsoft、Facebook、Yahoo、Twitter)来访问我的应用程序中使用 [Authorize] 属性装饰的部分。

[我注意到的一件事是 VS 创建的默认 web.config 不包含任何有关成员资格或角色提供者的部分,这与我在 ASP.NET Web 表单应用程序中看到的不同。]

我将项目部署到 azurewebsites.net 站点。最初一切正常,但在使用一段时间后,该应用程序将抛出异​​常,因为它尝试使用服务器的机器配置文件使用名为 LocalSqlServer 的连接字符串访问 SqlMembershipProvider

Q1:SqlMembershipProvider 与 SimpleMembership 提供者有何关系?

无论如何,我在 web.config 中创建了一个 部分并添加了 。这解决了这个问题,但又产生了另一个问题,因为现在它再次尝试使用连接字符串LocalSqlServer 访问 machine.config 中的SqlRoleProvider!我尝试将带有 部分添加到我的 web.config 中,但没有成功。它坚持要包含一个 defaultProvider。我应该放什么?

第二季度。 .NET Framework 4.0 MVC 4 应用程序中用于 SimpleMembership 角色提供程序的程序集是什么?

我试过了:

System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

但它带来了另一个问题,那就是Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'。在我运行 aspnet_regsql.exe 之前我想问一下:

Q3:为什么标准app运行一段时间后就开始找SqlMembershipProvider和SqlRoleProvider了?

有人在玩弄服务器上的设置吗?

【问题讨论】:

  • 在使用基于角色的安全性时,请参阅this post 这可能会有所帮助。

标签: simplemembership


【解决方案1】:

这是使用 SimpleMembership 时您的 web.config 设置的外观。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

包含 SimpleMembership 角色提供程序的程序集是 WebMatrix.WebData。

SqlMembershipProvider 与 SimpleMembership 无关,只是它们都是成员资格提供者。我的猜测是,如果 SimpleMembership 配置不正确,它默认为 SqlMembershipProvider。

您需要在应用程序中的某个位置调用WebSecurity.InitializeDatabaseConnection 为 SimpleMembership 初始化数据库。此方法中的第一个参数指示要使用的连接字符串。如果应用程序是使用 MVC4 Internet 模板创建的,则此方法在帐户控制器上装饰的过滤器 InitializeSimpleMembershipAttribute 中调用。如果您需要自己添加对 InitializeDatabaseConnection 方法的调用,我只需将其放在 Gloaba.asax Application_Start 方法中即可。

【讨论】:

  • 谢谢,您的信息有效。我想知道为什么 MVC 与 Web 表单应用程序不同,而是将东西隐藏在 machine.config 中。仍然是一个谜是为什么服务器会突然出现不同的行为。
猜你喜欢
  • 2012-04-08
  • 2023-03-14
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2017-07-26
  • 1970-01-01
相关资源
最近更新 更多