亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET Whidbey中實現Provider

2019-11-18 19:40:21
字體:
來源:轉載
供稿:網友

  “Whidbey”是微軟工具套件的下一個版本。按照微軟的計劃,它將會在2004年底推出。

  asp.net 2.0(codename Whidbey)通過PRovider模式為用戶驗證、角色管理等方面提供了非常強大易用的框架模型。Whidbey中提供了一個Asp.Net configuration工具,通過它可以非常容易地配置用戶信息數據庫,管理角色等等,再與新加入的Security控件配合,幾乎不用寫什么代碼就能夠實現用戶驗證和角色管理功能。關于這些控件和配置工具的具體使用,可以參考這篇文章:使用更精簡的代碼保證 ASP.NET 應用程序的安全

  但是在PDC Preview版本的Whidbey中,這個配置工具的功能還不是很完善。從我使用的情況來看,它目前還只能創建和連接自己的Demo用的access數據庫,不能連接SQL Server數據庫進行擴展。因此,為了能夠連接SQL Server,我們必須提供我們自己的Providers。這里以連接IBuySpy的Portal數據庫為例來說明如何實現一個Membership Provider。

  為了搞清楚如何實現我們自己的Membership Provider,有必要先看看Whidbey默認使用的Membership Provider是如何做的。在machine.config配置文件中,Whidbey使用類似下面這樣的配置實現:

<membership defaultProvider="AspNetAccessProvider" userIsOnlineTimeWindow="15" >
<providers>
<add name="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="Stores and retrieves membership data from the local Microsoft SQL Server database"
/>

<add name="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="Stores and retrieves membership data from the local Microsoft Access database file"
/>

</providers>
</membership> 

  關于這段配置文件的更詳細解說,可以參考《A First Look at ASP.NET v. 2.0》。
  可以看出,Whidbey默認使用SqlMembershipProvider或者AccessMembershipProvider來進行用戶驗證和管理。這兩個Provider實現了IProvider和IMembershipProvider接口,實際上這兩個接口也是每個MembershipProvider所必需的,其中IProvider負責Provider的初始化,而IMembershipProvider則實現MembershipProvider的主要功能。它們的定義如下:

namespace System.Configuration.Provider
{
 public interface IProvider
 {
  public string Name { get; }
  public void Initialize(string name,
  System.Collections.Specialized.NameValueCollection config);
 }
}

namespace System.Web.Security
{
 public interface IMembershipProvider
 {
  public bool ChangePassword(string name, string oldPwd, string newPwd);
  public bool ChangePasswordQuestionAndAnswer(string name, string password,
string newPwdQuestion, string newPwdAnswer);
  public System.Web.Security.MembershipUser CreateUser(string username, string password, string email,out System.Web.Security.MembershipCreateStatus status);
  public bool DeleteUser(string name);
  public System.Web.Security.MembershipUserCollection GetAllUsers();
  public int GetNumberOfUsersOnline();
  public string GetPassword(string name, string answer);
  public System.Web.Security.MembershipUser GetUser(string name,bool userIsOnline);
  public string GetUserNameByEmail(string email);
  public string ResetPassword(string name, string answer);
  public void UpdateUser(System.Web.Security.MembershipUser user);
  public bool ValidateUser(string name, string password);
  public string ApplicationName {get; set;}
  public bool EnablePasswordReset { get;}
  public bool EnablePasswordRetrieval { get;}
  public bool RequiresQuestionAndAnswer { get;}
 }

  現在可以動手來實現我們自己的MembershipProvider了:

public class MyMembershipProvider : IProvider, IMembershipProvider
{
 ……

  驗證功能是必需的:

public bool ValidateUser (string name, string password)
{
 string connectStr = ConfigurationSettings.ConnectionStrings["PortalData"];
 SqlConnection myConnection = new SqlConnection (connectStr);
 SqlCommand myCommand = new SqlCommand ("UserLogin", myConnection);
 myCommand.CommandType = CommandType.StoredProcedure;

 // Add Parameters to SPROC
 SqlParameter parameterEmail = new SqlParameter ("@Email", SqlDbType.NVarChar, 100);
 parameterEmail.Value = name;
 myCommand.Parameters.Add (parameterEmail);

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

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

 // Open the database connection and execute the command
 myConnection.Open ();
 myCommand.ExecuteNonQuery ();
 myConnection.Close ();
 if ((parameterUserName.Value != null) && (parameterUserName.Value != System.DBNull.Value))
  return true;
  return false;
}

 

  現在在web.config中可以這樣配置connectionString了:

<connectionStrings>

<add name="BugDepotData" connectionString="Data Source=(local);Trusted_Connection=true;Database=Portal" />

</connectionStrings> 

  這樣,我們自己的一個簡單的MembershipProvider就基本上完成了。接下來需要配置web.config,讓需要Provider服務的控件能夠認識它:

<membership>
?。紁roviders>
 ?。糰dd name="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驗證,試試是不是已經能夠成功登陸了?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品久久久久秋霞不卡| 亚洲综合第一页| 久久精品亚洲国产| 亚洲v日韩v综合v精品v| 国模叶桐国产精品一区| 久久免费少妇高潮久久精品99| 91高潮在线观看| 久久久久久有精品国产| 日韩美女免费观看| 欧美午夜精品久久久久久人妖| 国产福利视频一区二区| 国产精品丝袜久久久久久高清| 亚洲男女性事视频| 成人两性免费视频| 久久久国产精品免费| 亚洲欧美日韩中文视频| 亚洲欧美一区二区三区久久| 欧美视频在线观看免费网址| 久久精品欧美视频| 亚洲欧洲午夜一线一品| 精品亚洲一区二区三区在线观看| 国产精品白丝jk喷水视频一区| 精品国内亚洲在观看18黄| 欧美日韩一区二区免费视频| 国产精品第10页| 性欧美办公室18xxxxhd| www亚洲欧美| 欧美激情性做爰免费视频| 亚洲国内精品在线| 国产在线视频91| 26uuu另类亚洲欧美日本一| 欧美激情18p| 91禁外国网站| 欧美亚洲国产日韩2020| 国产精品久久视频| 欧美多人乱p欧美4p久久| 精品国产电影一区| 另类少妇人与禽zozz0性伦| 亚洲国产精品热久久| 性欧美亚洲xxxx乳在线观看| 亚洲欧美另类在线观看| www.久久久久| 成人av在线天堂| 在线观看91久久久久久| 57pao精品| 136fldh精品导航福利| 日韩hd视频在线观看| 米奇精品一区二区三区在线观看| 欧美日韩国产一区在线| 久久影院免费观看| 日韩在线精品一区| 午夜精品久久久久久久男人的天堂| 日本亚洲欧美成人| 欧美综合一区第一页| 2019中文字幕在线| 欧美日韩xxx| 国产精品视频一区二区三区四| 国产精品27p| 久久久久成人网| 欧美在线精品免播放器视频| 91午夜理伦私人影院| 久久久精品久久久| 亚洲国产美女久久久久| 国产精品av电影| 韩曰欧美视频免费观看| 国产欧美一区二区三区在线| 美女av一区二区三区| 欧亚精品在线观看| 日本国产精品视频| 精品国产精品自拍| 国产美女精品视频| 日韩在线精品一区| 国a精品视频大全| 中文字幕视频一区二区在线有码| 国产亚洲人成网站在线观看| 亚洲国产91色在线| 最新亚洲国产精品| 国产精品久久久久久久久久久新郎| 久久69精品久久久久久国产越南| 美女视频久久黄| 欧美在线一级va免费观看| 日韩激情片免费| 少妇高潮久久久久久潘金莲| 国内免费久久久久久久久久久| 亚洲人成网站免费播放| 精品日韩视频在线观看| 欧美激情高清视频| 在线视频国产日韩| 欧美大片大片在线播放| 上原亚衣av一区二区三区| 久久亚洲精品毛片| 国产日韩av高清| 亚洲三级av在线| 亚洲国产欧美一区| 国产成人精品亚洲精品| 亚洲精品自产拍| 一区二区三区久久精品| 少妇精69xxtheporn| 欧美亚洲激情视频| 国产美女搞久久| 久久夜色精品国产亚洲aⅴ| 欧洲成人性视频| 亚洲欧洲在线免费| 91网站免费观看| 久久露脸国产精品| 亚洲第一级黄色片| 亚洲成人久久久久| 欧美在线影院在线视频| 国产成人拍精品视频午夜网站| 亚洲最大的免费| 永久免费看mv网站入口亚洲| 日韩亚洲欧美中文在线| 久久91精品国产| 麻豆国产精品va在线观看不卡| 久久综合五月天| 91精品国产91久久久久久| 日韩欧美在线第一页| 国产精品成人v| 亚洲天堂网在线观看| 国产91色在线| 在线观看精品自拍私拍| 成人黄色片网站| 日韩男女性生活视频| 国产一区二区三区三区在线观看| 91久久久国产精品| 亚洲精品免费一区二区三区| 亚洲日韩中文字幕在线播放| 亚洲专区国产精品| 日本中文字幕成人| 国产一区二区三区在线观看视频| 中文字幕免费国产精品| 日韩精品免费视频| 日韩欧美高清在线视频| 2019av中文字幕| 国产69精品久久久久99| 欧美精品在线看| 成人久久18免费网站图片| 国语自产精品视频在线看一大j8| 正在播放欧美一区| 综合136福利视频在线| 国产精品美乳一区二区免费| 亚洲欧美精品中文字幕在线| 亚洲理论在线a中文字幕| 欧美激情伊人电影| 欧美激情一区二区三区成人| 国内精品在线一区| 欧美日韩综合视频网址| 51视频国产精品一区二区| 久久国产精品网站| 欧美精品在线第一页| 国产日韩欧美黄色| 日韩中文在线中文网在线观看| 亚洲男人天堂九九视频| 26uuu亚洲国产精品| 亚洲一区二区三区乱码aⅴ| 欧美福利在线观看| 亚洲xxxxx性| 国产精品高潮呻吟久久av无限| 成人在线观看视频网站| 成人日韩在线电影| 欧美激情精品在线| 亚洲色图18p| 精品自在线视频| 揄拍成人国产精品视频|