C# 从windows应用程序管理asp.net网站(创建新用户、将用户分配到角色等)
我有一个使用基于表单的身份验证的asp.net web应用程序、一个SqlMembershipProvider(使用加密密码格式)和一个SqlRoleProvider。我需要知道是否有可能从windows应用程序管理用户(创建新用户,将他们分配到角色等)——超级用户不希望web应用程序本身具有任何管理功能 以下是web.config中的成员资格提供程序定义:C# 从windows应用程序管理asp.net网站(创建新用户、将用户分配到角色等),c#,.net,asp.net,vb.net,winforms,C#,.net,Asp.net,Vb.net,Winforms,我有一个使用基于表单的身份验证的asp.net web应用程序、一个SqlMembershipProvider(使用加密密码格式)和一个SqlRoleProvider。我需要知道是否有可能从windows应用程序管理用户(创建新用户,将他们分配到角色等)——超级用户不希望web应用程序本身具有任何管理功能 以下是web.config中的成员资格提供程序定义: <membership defaultProvider="MyProvider"> <providers>
<membership defaultProvider="MyProvider">
<providers>
<add name="MyProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="MyConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/MyWebApp"
requiresUniqueEmail="true"
passwordFormat="Encrypted"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
以及角色管理器定义:
<roleManager enabled="true" defaultProvider="MyRoleManager">
<providers>
<add name="MyRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="MyConnectionString"
applicationName="/MyWebApp" />
</providers>
</roleManager>
以下是machineKey定义(能够使用加密密码所必需的):
显然,我有一个Sql Server数据库,其中包含web应用程序的用户和角色。我想创建一个引用web应用程序集的单独windows应用程序,并使用配置的MembershipProvider、RoleProvider和machineKey创建用户、将用户分配到角色等。如果不可能,我可以在windows应用程序内从web.config复制配置设置。但我也不知道怎么做
我认为这是可能的,这是不是太离谱了?我尝试过用谷歌搜索解决方案,但信噪比非常差。我不确定这里的“最佳实践”是什么,但一个简单的方法应该是这样
- 创建新的windows应用程序
- 添加一个应用程序配置文件 (app.config)
- 将适当的设置复制到 app.config(上面的设置 ^)
- 添加对System.Web的引用
- 并从您的web应用程序复制代码 使用上述设置 连接到数据库
- 创建新的windows应用程序
- 添加一个应用程序配置文件 (app.config)
- 将适当的设置复制到 app.config(上面的设置 ^)
- 添加对System.Web的引用
- 并从您的web应用程序复制代码 使用上述设置 连接到数据库
- 你可以用这个,但不是 基于Windows窗体,但不是其中的一部分 您的Web应用程序的。它来了 使用Visual Studio并可以 通过单击ASP.NET访问 解决方案中的配置图标 探险家
- 直接操纵是可能的 服务器使用的提供程序数据库 来自Windows的SqlMembershipProvider 表单应用程序,但您可能必须 小心不要弄坏东西
- 如果要创建自定义 会员资格提供者,你会在 如何控制成员资格和角色 数据被持久化。如果你那样做了 您可以创建一个可重用的库 可用于Web应用程序和 还有一个Windows窗体应用程序
- 你可以用这个,但不是 基于Windows窗体,但不是其中的一部分 您的Web应用程序的。它来了 使用Visual Studio并可以 通过单击ASP.NET访问 解决方案中的配置图标 探险家
- 直接操纵是可能的 服务器使用的提供程序数据库 来自Windows的SqlMembershipProvider 表单应用程序,但您可能必须 小心不要弄坏东西
- 如果要创建自定义 会员资格提供者,你会在 如何控制成员资格和角色 数据被持久化。如果你那样做了 您可以创建一个可重用的库 可用于Web应用程序和 还有一个Windows窗体应用程序
我不认为尝试从Windows窗体应用程序中使用SqlMembershipProvider是一种实用的方法。我根据其他答案(他们都得到+1)提出了一个解决方案 首先,我创建了应用程序配置文件(app.Config)。它准确地反映了web应用程序在web.config中找到的内容,但连接字符串的处理方式除外:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="MyConnectionString"
connectionString ="SERVER=abc;UID=def;PWD=hij;Initial Catalog=klm;MultipleActiveResultsets=True"/>
</connectionStrings>
<system.web>
<membership defaultProvider="MySqlMembershipProvider">
<providers>
<add name="MySqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="MyConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/MyWebApp"
requiresUniqueEmail="true"
passwordFormat="Encrypted"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="MySqlRoleManager">
<providers>
<add name="MySqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="MyConnectionString"
applicationName="/MyWebApp" />
</providers>
</roleManager>
<machineKey
validationKey="BC50A82A6AF6A015C34C7946D29B817C00F04D2AB10BC2128D1E2433D0E365E426E57337CECAE9A0681A2C736B9779B42F75D60F09F142C60E9E0E8F9840DB46"
decryptionKey="122035576C5476DCD8F3611954C837CDA5FE33BCDBBF23F7"
validation="SHA1"
decryption="AES"/>
</system.web>
</configuration>
此时,只需访问提供者
类的成员身份
和角色
属性。例如,下面打印出前10个用户及其角色:
int total;
foreach (MembershipUser user in Provider.Membership.GetAllUsers(0, 10, out total))
{
var sb = new StringBuilder();
sb.AppendLine(user.UserName);
foreach (var role in Provider.Role.GetRolesForUser(user.UserName))
{
sb.AppendLine("\t" + role);
}
Console.WriteLine(sb.ToString());
}
我根据其他答案(他们都得到+1)提出了一个解决方案,并且 首先,我创建了应用程序配置文件(app.Config)。它准确地反映了web应用程序在web.config中找到的内容,但连接字符串的处理方式除外:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="MyConnectionString"
connectionString ="SERVER=abc;UID=def;PWD=hij;Initial Catalog=klm;MultipleActiveResultsets=True"/>
</connectionStrings>
<system.web>
<membership defaultProvider="MySqlMembershipProvider">
<providers>
<add name="MySqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="MyConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/MyWebApp"
requiresUniqueEmail="true"
passwordFormat="Encrypted"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="MySqlRoleManager">
<providers>
<add name="MySqlRoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="MyConnectionString"
applicationName="/MyWebApp" />
</providers>
</roleManager>
<machineKey
validationKey="BC50A82A6AF6A015C34C7946D29B817C00F04D2AB10BC2128D1E2433D0E365E426E57337CECAE9A0681A2C736B9779B42F75D60F09F142C60E9E0E8F9840DB46"
decryptionKey="122035576C5476DCD8F3611954C837CDA5FE33BCDBBF23F7"
validation="SHA1"
decryption="AES"/>
</system.web>
</configuration>
此时,只需访问提供者
类的成员身份
和角色
属性。例如,下面打印出前10个用户及其角色:
int total;
foreach (MembershipUser user in Provider.Membership.GetAllUsers(0, 10, out total))
{
var sb = new StringBuilder();
sb.AppendLine(user.UserName);
foreach (var role in Provider.Role.GetRolesForUser(user.UserName))
{
sb.AppendLine("\t" + role);
}
Console.WriteLine(sb.ToString());
}
我可以实例化一个SqlMembershipProvider和一个SqlRoleProvider,并设置几乎所有必要的属性,但如何给它们一个连接字符串呢?我如何向SqlMembershipProvider提供验证和解密密钥?根据,没有设置SqlMembershipProvider连接字符串的属性或方法。您应该能够以与在web应用中相同的方式完成所有这些操作。我假设您在web应用程序中使用类似的代码供用户登录?在web应用程序中,初始化都是自动完成的。您永远不必手动调用
SqlMembershipProvider
的Initialize
方法。另外,我使用的是登录控件,所以我甚至从未接触过SqlMembershipProvider
。我可以实例化SqlMembershipProvider和SqlRoleProvider,并设置几乎所有必要的属性,但如何给它们一个连接字符串?我如何向SqlMembershipProvider提供验证和解密密钥?根据,没有设置SqlMembershipProvider连接字符串的属性或方法。您应该能够以与在web应用中相同的方式完成所有这些操作。我想