如何通过每个页面请求更改asp.net成员资格的数据库
本文关键字:成员 net asp 数据库 何通过 请求 | 更新日期: 2023-09-27 18:30:00
我有一个场景,在这个场景中,我的应用程序连接到关于url中子域的不同数据库。
我试过这个代码:
public class Provider : SqlMembershipProvider
{
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
base.Initialize(name, config);
// Update the private connection string field in the base class.
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
sqlBuilder["Data Source"] = "My-PC''SQLEXPRESS";
string dbName;
if (!string.IsNullOrEmpty(Helpers.RouteManager.GetSubDomain()))
{
dbName = Helpers.RouteManager.GetSubDomain().ToString()+"_db";
}
else
{
dbName = "dbName";
}
bool isEqual = string.Equals(name, dbName);
sqlBuilder["Initial Catalog"] = dbName;
sqlBuilder["Integrated Security"] = true;
sqlBuilder["Application Name"] = "EntityFramework";
FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
connectionStringField.SetValue(this, sqlBuilder.ConnectionString);
}
}
我从Application_BeginRequest()
方法调用这个函数。
我面临的问题是,当我构建应用程序时,它使用特定的子域访问url,它连接到指定的数据库,但我尝试不同的子域,它使用相同的数据库作为asp.net成员。
但当我重新构建应用程序并尝试另一个子域时,它就可以工作了。
我的代码似乎只是在构建解决方案后第一次工作。
请有人引导我。
Thanx
尝试在web配置文件中配置不同的成员资格提供程序。
<membership>
<providers>
<add name="ProviderA" connectionStringName="ConnectionA" ... />
<add name="ProviderB" connectionStringName="ConnectionB" ... />
</providers>
</membership>
<connectionStrings>
<add name="ConnectionA" .... />
<add name="ConnectionB" .... />
</connectionStrings>
然后在代码中使用此提供程序
var user = Membership.Providers["ProviderA"].GetUser(username, false);
var user = Membership.Providers["ProviderB"].GetUser(username, false);
很抱歉,这不是一个真正的答案,但我想在这里质疑您的体系结构。为什么您的应用程序需要在多个数据库中包含成员数据?它的本质是维护整个应用程序的帐户详细信息(身份验证/授权)。如果您希望能够根据Url控制对应用程序某些区域的访问,可以通过使用基于角色的表单身份验证来实现。互联网上有很多文章解释这一点。希望这能让你朝着正确的方向前进。
更新:我刚刚在stackoverflow上找到了这个答案。恐怕您想要做的似乎是不可能的,因为成员资格提供者是应用程序的所有用户之间共享的全局静态对象。基于url更改它不仅会更改特定用户的url,还会更改所有登录用户的url在这里查看