本实例主要介绍如何使用System.Web.Security命名空间下的FormsAuthentication类的HashPasswordForStoringInConfigFile方法根据指定的密码和哈希算法生成一个适合于存储在配置文件中的哈希密码,对口令加密。这个方法可以将用户提供的字符变成乱码,然后存储起来,甚至可以存储在cookies中。HashPasswordForStoringInConfigFile方法使用起来很简单,它支持SHA1和MD5加密算法。
主要代码如下:
protected void Button3_Click(object sender, EventArgs e)
{
TextBox2.Text = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text, "MD5");
TextBox3.Text = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text, "SHA1");
}
本实例主要介绍在Global.asax文件application_start()事件中使用Application对象创建全局变量。主要代码如下:
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
Application["nameId"] = "Admin";
}
本实例主要介绍利用Global.asax文件和web.config文件设置全局数据库连接字符串。首先在web.config文件中配置连接数据库字符串,然后在Global.asax文件中把字符串赋给一个全局变量。
web.config文件中配置连接数据库字符串的代码如下:
<appSettings>
<add key="SetConnection" value="server=(local);database=db_01;uid=sa;pwd=;" />
</appSettings>
在Global.asax文件中把字符串赋给一个全局变量,代码如下:
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
application["connstr"] = this.Context.Request.PhysicalApplicationPath + ConfigurationSettings.AppSettings ["SetConnection"].ToString();
}
本实例主要介绍如何使用Request对象的UserHostAddress属性来获取客户端的IP地址。
主要代码如下:
protected void Button2_Click(object sender, EventArgs e)
{
TextBox2.Text = Request.UserHostAddress;
}
本实例主要介绍如何使用Path类的GetExtension方法取得指定路径中的文件扩展名。
主要代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = System.IO.Path.GetExtension(FileUpload1.FileName);
}
本实例主要介绍如何使用Server对象、Response对象和Request对象在ASP.NET的页面之间使用URL传值。首先用Server对象的UrlEncode方法对所传递的字符进行URL编码,这样能保证URL从Web服务到客户端进行可靠HTTP传输,避免接收乱码。然后用Response对象的Redirect方法导航页面传值。然后用Request对象的QueryString方法接收传递的值,再用Server对象的UrlDecode方法对字符进行URL解码。
页面传值代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
string mesage=Server.UrlEncode("明日科技");
Response.Redirect("Default2.aspx?msg=" + mesage);
}
页面接收值代码如下:
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = Server.UrlDecode(Request.QueryString["msg"]);
}
本实例主要介绍如何使用IsPostBack属性实现页加载,IsPostBack属性获取一个值,该值指示该页是否正为响应客户端回发而加载,或者是否正被首次加载和访问。
主要代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{ TextBox1.Text = "第一次加载"; }
else
{
TextBox1.Text="第二次加载";
}
TextBox1.ForeColor = System.Drawing.Color.Red;
}
本实例主要介绍如何使用System.Web.Caching命名空间下的Cache类的公共方法来实现缓存技术缓存整个页面。实现本技巧主要用到SetExpires方法设置缓存有效的时间,SetCacheability方法设置Cache-Control HTTP标头。Cache-Control HTTP标头控制在网络上缓存文档的方式,参数由Httpcacheability枚举提供。Httpcacheability枚举用于设置页的可缓存性,其成员值及说明如表5.1所示。
表5.1 Httpcacheability枚举值及说明
成员值 | 说明 |
NoCache | 指定发出请求的设备每次应从Web服务器获取响应 |
Public | 允许由客户端和共享(代理)缓存来缓存响应 |
Private | 指定响应只能在客户端上缓存,而不能由共享(代理服务器)缓存来缓存 |
Server | 指定仅在原始服务器上缓存响应 |
ServerAndNoCache | 应用Server和NoCache两者的设置,以指示在该服务器上缓存内容,但显式拒绝其他所有服务器缓存响应的功能 |
ServerAndPrivate | 指定仅在原始服务器和请求客户端上缓存响应;不允许代理服务器缓存响应 |
运行程序,其效果如图5.26所示。主要代码如下:
protected void Page_Load(object sender, EventArgs e)
{
//设置缓存时间
Response.Cache.SetExpires(DateTime.Now.AddSeconds(40));
//设置 Cache-Control HTTP 标头。Cache-Control HTTP 标头控制在网络上缓存文档的方式。
Response.Cache.SetCacheability(HttpCacheability.Public);
}
protected void Button1_Click(object sender, EventArgs e)
{
Label2.Text = "上次页面时间:"+DateTime.Now.ToString();
}
图5.26 输出缓存技术缓存ASP.NET页面
本实例主要介绍如何使用System.Collections.Specialized命名空间下NameValueCollection类的公共方法和Request对象Headers属性来获取当前IE浏览器的相关信息。NameValueCollection类表示可通过键或索引访问的关联String键和String值的集合,用于存储信息。Headers属性获取HTTP头集合。运行程序,效果如图5.27所示。主要代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
System.Collections.Specialized.NameValueCollection name = new System.Collections.Specialized.NameValueCollection();
int intName;
string strName;
name = Request.Headers;
int intCount = name.Count;
Response.Write("<center>示例显示当前IE浏览器头信息</center>");
Response.Write("<Left>版权所有:CopyRight.2007.04.10</Left>");
for (int i = 0; i < intCount; i++)
{
strName=name.GetKey(i);
Response.Write("<p>名字:" + name.GetKey(i) + " 值:"+name.Get(strName));
}
}
图5.27 ASP.NET中显示当前IE浏览器头信息
本实例主要介绍如何使用DateTime类的IsLeapYear方法判断年份是否为闰年。IsLeapYear方法返回指定的年份是否为闰年的指示。语法格式如下:
public static bool IsLeapYear (int year)
参数说明:
year:表示4位数年份。
返回值:如果year为闰年,为True;否则为False。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
int intYear = 2007;
if (DateTime.IsLeapYear(intYear))
{
MessageBox.Show("2007年是闰年", "判断是否为闰年", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else { MessageBox.Show("2007年不是闰年", "判断是否为闰年", MessageBoxButtons.OK, MessageBoxIcon. Information); }
}
本实例主要介绍如何使用ChineseLunisolarCalendar类的GetSexagenaryYear方法和GetTerrestrialBranch方法来判断十二生肖年份。ChineseLunisolarCalendar类将时间分成多个部分来表示,如分成年、月和日。年按农历计算,而日和月按阳历计算。GetSexagenaryYear方法计算与指定日期对应的甲子(60年)循环中的年。语法格式如下:
public virtual int GetSexagenaryYear (DateTime time)
此方法返回甲子循环中的一个从1~60的数字,它与date参数对应。
GetTerrestrialBranch方法计算甲子(60年)循环中指定年份的地支。语法格式如下:
public int GetTerrestrialBranch (int sexagenaryYear)
参数sexagenaryYear是一个从1~60的整数,表示甲子循环中的一年。返回一个从1~12的整数。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.ChineseLunisolarCalendar chinseCaleander = new System.Globalization. ChineseLunisolarCalendar();
string TreeYear = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
int intYear = chinseCaleander.GetSexagenaryYear(DateTime.Now);
string Tree = TreeYear.Substring(chinseCaleander.GetTerrestrialBranch(intYear) - 1, 1);
MessageBox.Show("今年是十二生肖"+Tree+"年", "判断十二生肖", MessageBoxButtons.OK, MessageBoxIcon. Information);
}
本实例主要介绍如何使用System.Net命名空间下的IPHostEntry类和Dns类的方法和属性根据IP地址获取本机域名。
主要代码如下:
try
{
System.Net.IPHostEntry ipho = System.Net.Dns.GetHostByAddress(TextBox1.Text);
Response.Write(ipho.HostName);
}
catch (Exception ee)
{ Response.Write(ee.Message); }
本实例主要介绍如何使用Environment类的方法和属性来获取“我的文档”系统文件夹路径。提供有关当前环境和平台的信息以及操作它们的方法。本技巧使用GetFolderPath方法来获取指向由指定枚举标识的系统特殊文件夹的路径。语法格式如下:
public static string GetFolderPath (SpecialFolder folder)
参数folder标识系统特殊文件夹的枚举常数。
如果指定系统的特殊文件夹存在于用户的计算机上,则返回到该文件夹的路径;否则为空字符串(" ")。如果系统未创建文件夹、已删除现有文件夹或者文件夹是不对应物理路径的虚拟目录(例如“我的电脑”),则该文件夹不会实际存在。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("我的文档系统路径:" + Environment.GetFolderPath(Environment.SpecialFolder.Personal), "我的文档",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
本实例主要介绍如何使用Application类的StartupPath属性和ExecutablePath属性来获取启动应用程序可执行文件的路径。两个属性都能实现此功能,区别是StartupPath属性获取的路径不包括可执行文件的名称,ExecutablePath属性包括可执行文件的名称。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
string appPath = "不包括可执行文件的名称:" + Application.StartupPath;
string appPat1 = "包括可执行文件的名称:" + Application.ExecutablePath;
MessageBox.Show(appPath + "/n" + appPat1, "可执行文件的路径", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例主要介绍如何使用OperatingSystem类的公共属性来获取当前操作系统的信息。OperatingSystem类表示有关操作系统的信息,如版本和平台标识符。其公共属性及说明如表5.2所示。
表5.2 OperatingSystem类常用属性及说明
属 性 名 称 | 说 明 |
Platform | 获取标识操作系统平台的System.PlatformID枚举值 |
ServicePack | 获取此OperatingSystem对象表示的Service Pack版本 |
Version | 获取标识操作系统的System.Version对象 |
VersionString | 获取平台标识符、版本和当前安装在操作系统上的Service Pack的连接字符串表示形式 |
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
OperatingSystem Sys = Environment.OSVersion;
string strName = "系统名称:" + Sys.Platform.ToString() + "/n";
strName += "系统版本:" + Sys.ServicePack.ToString() + "/n";
strName += "系统标识:" + Sys.Version.ToString() + "/n";
strName += "系统信息:" + Sys.VersionString.ToString() + "/n";
MessageBox.Show(strName, "操作系统信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例介绍如何使用Convert类的公共方法实现基本数据类型随意转换。Convert类用于将一个基本数据类型转换为另一个基本数据类型,返回与指定类型的值等效的类型;受支持的基类型是Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime和String。可根据不同的需要使用Convert类的公共方法实现不同数据类型的转换。所执行的实际转换操作分为以下3类:
(1)从某类型到它本身的转换只返回该类型,不实际执行任何转换。
(2)无法产生有意义的结果的转换引发InvalidCastException,不实际执行任何转换。下列转换会引发异常:从Char转换为Boolean、Single、Double、Decimal或DateTime,以及从这些类型转换为Char,还有从DateTime转换为除String之外的任何类型,以及从任何类型(String除外)转换为DateTime。
(3)任何基类型(上面描述的基类型除外)都可以与任何其他基类型进行相互转换。
Convert类常用公共方法及说明如表5.3所示。
表5.3 Convert类常用公共方法及说明
方 法 名 称 | 说 明 |
FromBase64CharArray | 将Unicode字符数组的子集(将二进制数据编码为base 64数字)转换成等效的8位无符号整数数组。参数指定输入数组的子集以及要转换的元素数 |
FromBase64String | 将指定的String(将二进制数据编码为base 64数字)转换成等效的8位无符号整数数组 |
GetHashCode | 用作特定类型的哈希函数。GetHashCode适合在哈希算法和数据结构(如哈希表)中使用 |
ToBase64CharArray | 将8位无符号整数数组的子集转换为用Base 64数字编码的Unicode字符数组的等价子集 |
ToBase64String | 将8位无符号整数数组的值转换为它的等效String表示形式(使用base 64数字编码) |
ToBoolean | 将指定的值转换为等效的布尔值 |
ToByte | 将指定的值转换为8位无符号整数 |
ToChar | 将指定的值转换为Unicode字符 |
ToDateTime | 将指定的值转换为DateTime |
ToDecimal | 将指定值转换为Decimal数字 |
ToDouble | 将指定的值转换为双精度浮点数字 |
ToInt16 | 将指定的值转换为16位有符号整数 |
ToInt32 | 将指定的值转换为32位有符号整数 |
ToInt64 | 将指定的值转换为64位有符号整数 |
ToSByte | 将指定的值转换为8位有符号整数 |
ToSingle | 将指定的值转换为单精度浮点数字 |
ToString | 将指定值转换为其等效的String表示形式 |
ToUInt16 | 将指定的值转换为16位无符号整数 |
ToUInt32 | 将指定的值转换为32位无符号整数 |
ToUInt64 | 将指定的值转换为64位无符号整数 |
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
string str = "转换前的数据类型:/n";
bool xBool = false;
float xSingle = 4.0f;
double xDouble = 5.0;
decimal xDecimal = 6.0m;
string xString = "7";
char xChar = '8'; // '8' = hexadecimal 38 = decimal 56
str += "bool类型:" + "值false /n";
str += "float类型:" + "值4.0f /n";
str += "double类型:" + "值5.0 /n";
str += "decimal类型:" + "值6.0m /n";
str += "string 类型:" + "值7 /n";
str += "char类型:" + "值8 /n";
string str1 = "转换后的数据类型:/n";
str1 += "bool类型转换成ToInt64类型:" + Convert.ToInt64(xBool).ToString() + "/n";
str1 += "float类型转换成ToInt64类型:" + Convert.ToInt64(xSingle).ToString() + "/n";
str1 += "double类型转换成ToInt64类型:" + Convert.ToInt64(xDouble).ToString() + "/n";
str1 += "decimal类型转换成ToInt64类型:" + Convert.ToInt64(xDecimal).ToString() + "/n";
str1 += "string 类型转换成ToInt64类型:" + Convert.ToInt64(xString).ToString() + "/n";
str1 += " char 类型转换成ToInt64类型:" + Convert.ToInt64(xChar).ToString() + "/n";
MessageBox.Show(str+str1,"数据类型转换",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
本实例主要介绍如何使用Guid类的NewGuid()方法创建一个重复机率很小的GUID数据。
GUID是一个128位整数(16字节),可用于所有需要唯一标识符的计算机和网络。此标识符重复的可能性非常小。NewGuid方法初始化Guid类的新实例,新Guid的值均为零或者等于任何其他Guid的可能性非常小。运行程序,效果如图5.28所示。
图5.28 全局唯一标识符
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("全局唯一标识符 (GUID) /n" + System.Guid.NewGuid().ToString(), "生成的GUID", MessageBoxButtons.OK, MessageBoxIcon.Information);
}