首页客户案例网站建设微信小程序开发网络营销APP开发电商平台开发装修公司新闻联系咨询

网站技术分享:ASP.NETWhidbey中实现Provider_重庆彭水论坛小程序开发可以吗

2019年06月12日

“Whidbey”是微软工具套件的下一个版本。按照微软的计划,它将会在2004年底推出。

Asp.Net2.0(codenameWhidbey)通过Provider模式为用户验证、角色管理等方面提供了非常强大易用的框架模型。Whidbey中提供了一个Asp.Netconfiguration工具,通过它可以非常容易地配置用户信息数据库,管理角色等等,再与新加入的Security控件配合,几乎不用写什么代码就能够实现用户验证和角色管理功能。关于这些控件和配置工具的具体使用,可以参考这篇文章:使用更精简的代码保证ASP.NET应用程序的安全

但是在PDCPreview版本的Whidbey中,这个配置工具的功能还不是很完善。从我使用的情况来看,它目前还只能创建和连接自己的Demo用的Access数据库,不能连接SQLServer数据库进行扩展。因此,为了能够连接SQLServer,我们必须提供我们自己的Providers。重庆彭水论坛小程序开发可以吗,这里以连接IBuySpy的Portal数据库为例来说明如何实现一个MembershipProvider。重庆彭水什么是o2o系统

为了搞清楚如何实现我们自己的MembershipProvider,有必要先看看Whidbey默认使用的MembershipProvider是如何做的。在machine.config配置文件中,Whidbey使用类似下面这样的配置实现:

<membershipdefaultProvider="AspNetAccessProvider"userIsOnlineTimeWindow="15">
<providers>
<addname="AspNetSqlProvider"
 type="System.Web.Security.SqlMembershipProvider,System.Web,Version=1.2.3400.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="StoresandretrievesmembershipdatafromthelocalMicrosoftSQLServerdatabase"
/>

<addname="AspNetAccessProvider"
type="System.Web.Security.AccessMembershipProvider,System.Web,Version=1.2.3400.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="AccessFileName"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="StoresandretrievesmembershipdatafromthelocalMicrosoftAccessdatabasefile"
/>

</providers>
</membership>

关于这段配置文件的更详细解说,可以参考《AFirstLookatASP.NETv.2.0》。
可以看出,Whidbey默认使用SqlMembershipProvider或者AccessMembershipProvider来进行用户验证和管理。这两个Provider实现了IProvider和IMembershipProvider接口,实际上这两个接口也是每个MembershipProvider所必需的,其中IProvider负责Provider的初始化,而IMembershipProvider则实现MembershipProvider的主要功能。它们的定义如下:

namespaceSystem.Configuration.Provider
{
 publicinterfaceIProvider
 {
publicstringName{get;}
publicvoidInitialize(stringname,
System.Collections.Specialized.NameValueCollectionconfig);
 }
}

namespaceSystem.Web.Security
{
 publicinterfaceIMembershipProvider
 {
publicboolChangePassword(stringname,stringoldPwd,stringnewPwd);
publicboolChangePasswordQuestionAndAnswer(stringname,stringpassword,
stringnewPwdQuestion,stringnewPwdAnswer);
publicSystem.Web.Security.MembershipUserCreateUser(stringusername,stringpassword,stringemail,outSystem.Web.Security.MembershipCreateStatusstatus);
publicboolDeleteUser(stringname);
publicSystem.Web.Security.MembershipUserCollectionGetAllUsers();
publicintGetNumberOfUsersOnline();
publicstringGetPassword(stringname,stringanswer);
publicSystem.Web.Security.MembershipUserGetUser(stringname,booluserIsOnline);
publicstringGetUserNameByEmail(stringemail);
publicstringResetPassword(stringname,stringanswer);
publicvoidUpdateUser(System.Web.Security.MembershipUseruser);
publicboolValidateUser(stringname,stringpassword);
publicstringApplicationName{get;set;}
publicboolEnablePasswordReset{get;}
publicboolEnablePasswordRetrieval{get;}
publicboolRequiresQuestionAndAnswer{get;}
 }
}

现在可以动手来实现我们自己的MembershipProvider了:


{
 ……
}

验证功能是必需的:

publicboolValidateUser(stringname,stringpassword)
{
 stringconnectStr=ConfigurationSettings.ConnectionStrings["PortalData"];
 SqlConnectionmyConnection=newSqlConnection(connectStr);
 SqlCommandmyCommand=newSqlCommand("UserLogin",myConnection);
 myCommand.CommandType=CommandType.StoredProcedure;

 //AddParameterstoSPROC
 SqlParameterparameterEmail=newSqlParameter("@Email",SqlDbType.NVarChar,100);
 parameterEmail.Value=name;
 myCommand.Parameters.Add(parameterEmail);

 SqlParameterparameterPassword=newSqlParameter("@Password",SqlDbType.NVarChar,20);
 parameterPassword.Value=password;
 myCommand.Parameters.Add(parameterPassword);

 SqlParameterparameterUserName=newSqlParameter("@UserName",SqlDbType.NVarChar,100);
 parameterUserName.Direction=ParameterDirection.Output;
 myCommand.Parameters.Add(parameterUserName); 

 //Openthedatabaseconnectionandexecutethecommand
 myConnection.Open();
 myCommand.ExecuteNonQuery();
 myConnection.Close();
 if((parameterUserName.Value!=null)&&(parameterUserName.Value!=System.DBNull.Value))
returntrue;
returnfalse;
}

现在在web.config中可以这样配置connectionString了:

<connectionStrings>

<addname="BugDepotData"connectionString="DataSource=(local);Trusted_Connection=true;Database=Portal"/>

</connectionStrings>

这样,我们自己的一个简单的MembershipProvider就基本上完成了。接下来需要配置web.config,让需要Provider服务的控件能够认识它:

<membership>
 <providers>
<addname="MyMembershipProvider"type="MyMembershipProvider"appName="/"/>
 </providers>
</membership>

这段设置是参考machine.config而来的,其中type属性的值是这样的字符串:

type="ProviderType,Assembly,Version,Culture,PublicKeyToken"

由于我们的MyMembershipProvider放在/Code目录下,并不是在单独的Assembly中,因此只需要指出ProviderType就行了。

这样,一个具有验证功能的Provider就完成了,现在可以在页面上放一个新的Security控件,比如Login控件,并指定它的MembershipProperty为MyMembershipProvider(或者也可以设置membership的defaultProvider属性为MyMembershipProvider),打开Forms验证,试试是不是已经能够成功登陆了?

本文来源于重庆网站建设公司与重庆网站设计制作公司-美洲豹科技重庆公司!

标签: 网站设计公司 、 网站建设公司 、 网站制作 、 网站设计 、 网站建设 、 重庆网站设计公司 、 重庆网站设计 、 重庆网站建设公司 、 重庆网站建设 、 重庆网站制作公司 、 重庆网站制作

填写您的服务需求获取项目报价。

* 请认真填写需求信息,我们会在24小时内与您取得联系。
线上服务咨询151-0237-3888填写需求索取报价