1: httpmodules ['mɑdʒul] 模式 模块 handlers ['hændlə] 操作者
HttpHanders的主要目的是处理对某种特定文件或者在URL中对某个文件路径的请求
HttpModule则主要被用于在最开始的阶段处理一个请求以及在最后阶段处理一个响应
<add verb="verb list" path="path/wildcard" type="type,assemblyname" validate="true|false"/>
verb 动作(Verb) 清单可为逗号分隔的HTTP 动作清单(例如,GET、PUT、POST) 或起始指令码对应(例如,万用字元* [星号])。
path 路径属性可包含单一URL 路径或简单万用字串(例如,*.aspx)。
type 指定逗号分隔的类别/组件组合。 ASP.NET 会先在应用程式的私用\bin 目录搜寻组件DLL,然后在系统组件快取中搜寻。
备注
<httpHandlers>设定由子目录继承。
依由上而下的顺序来处理<add>指示词。 如果有两个或更多的<add>子项目指定相同的动作/路径组合,则最后的<add>将覆写其他的组合。
Microsoft Internet Information Services (IIS) 对ISAPI 的对应扩充功能,有自己的看法。 若要使这个区段中指定的扩充功能的设定生效,该扩充功能必须在IIS 中对应至ASP.NET ISAPI。 对于非标准的扩充功能(不属于.aspx、.asmx、.asax 等的其他扩充功能),您必须设定IIS。
ASP.NET都使用HTTP请求实现了大量的自己的功能。ASP.NET使用处理程序来处理.aspx,.asmx,.soap和其他一些ASP.NET文件。
实现HTTP处理程序包含以下步骤:
1.编写一个实现IHttpHandler接口的类。
2. 在web.config或machine.config文件中注册这个处理程序。
3.在Internet服务管理器中把文件扩展如:(.kim)映射到ASP.NET ISAPI扩展DLL(aspnet_isapi.dll)上。
第一步
构建类库:
using System; using System.Collections.Generic; using System.Web; namespace Handler { public class HandlerTest : IHttpHandler //我们需要实现 IHttpHandler { public HandlerTest() { } //下面的都是你实现 IHttpHandler 自动生成的方法 public bool IsReusable { } public void ProcessRequest(HttpContext context) { //开始 string textbody = "<html><head><title>这里是头</title></head><body><h1>这里是内容</h1></body></html>"; context.Response.Write(textbody); } } }
第二步
<!--注册处理程序--> <httpHandlers> <add type="Handler.HandlerTest,Handler" verb="*" path="*.kim"/> </httpHandlers> </system.web>
第三步
运行IIS服务管理器,右键点击默认Web站点,选择属性,移动到Home目录选项页,并点击配置按钮。应用程序配置对话框弹出来了。点击添加按钮并在可执行字段输入aspnet_isapi.dll文件路径,在扩展字段输入.kim
ps:如果你的操作系统是XP SP2的话,在输入aspnet_isapi.dll路径时需要手工输入,不能用复制粘贴的形式,否则保存按钮变灰。浏览时去掉check file exit选项。
如果你直接用VS来调试,是不需要执行第三步的 。
序列化和反序列化
就好比,把一个人,从美国,传送到中国。
作用:例如,你保存了一个QQ的设置,那么你就可以直接吧QQ的设置从一个人,给到另外一个人。以对象的形式来保存,这样可以避免一个一个的设置。
序列化,就是将对象里面的字段及值以“文本”的方式保存成文件
反序列化,先创建一个相同的对象,然后将“文本”的保存的字段的值一一设置到对应的字段中。
序列化有很多种
流序列化,XML序列化,JSON序列化
演示一个 流序列化
1:可被序列化的Person 类
using System; using System.Collections.Generic; using System.Text; namespace XuLieHua { [Serializable] // 特性标签[] 里面的Serializable表示此类可以序列化 public class Person { public string Name { get; set; } public int Age { get; set; } } }
2:序列化和反序列化的操作
//序列化操作 private void btnGo_Click(object sender, EventArgs e) { Person p = new Person() { Age = 10, Name = "那年那月" }; //创建一个文件流,用来保存序列化之后的对象的信息 using (FileStream fs = new FileStream(@"D:\testSerialize\myPerson.txt", FileMode.OpenOrCreate)) { //创建二进制格式化器 BinaryFormatter bf = new BinaryFormatter(); //序列化对象到文件流 bf.Serialize(fs, p); } MessageBox.Show("序列化成功"); } //反序列化 private void btnGoBack_Click(object sender, EventArgs e) { //1:首先在本地,先生成一个空的对象 Person newp = new Person(); //2:获取序列化的数据,并且赋值给空白的对象 using (FileStream fs = new FileStream(@"D:\testSerialize\myPerson.txt", FileMode.OpenOrCreate)) { BinaryFormatter bf = new BinaryFormatter(); //从指定的文件流中,读取信息 并还原成 Person对象 newp = bf.Deserialize(fs) as Person; //文件流序列化和反序列化的区别就是用到的 Serialize 和 DeSerialize } MessageBox.Show("年龄"+newp.Age+",名字是"+newp.Name+""); }
3: 序列化出来的文件 myPerson.txt 打开是什么样子