ASP.Net 运行机制
1.使用动态Web开发技术
2.客户端通过浏览器输入地址,请求该动态页面
3.Web服务器根据客户端的请求,对Web应用程序进行编译或解释,并生成HTML流,返回给客户端
4.客户端浏览器解释HTML流,并显示为Web页面
当请求发送至服务器IIS并被其接收后,IIS服务器会判断请求文件的类型,
如果是静态文件 如HTML 图片或Text IIS会自行根据目录找到文件并发送给客户端
如果是动态文件 ASP页面 则IIS会通过aspnet_isapi.dll将请求转交给ASP.Net运行时环境进行处理,最终的处理结果会返回给IIS,发送给客户端
ASP.Net运行时环境中处理请求是通过一系列对象来完成的,包含HttpApplication,HttpModule, HttpHandler
通过使用HttpApplication对象来处理到的请求,HttpApplication对象每次只能处理一个请求,这样其成员才可以于储存针对每个请求的数据
节点配置关键字
path 访问路径 表示只要请求path属性指定的文件 都将有type属性决定的Http
type 用逗号分隔的类或程序集 asp.net首先在应用程序的专用的Bin 目录中进行
HttpModule
对于HTTP请求而言,HttpModule是HTTP请求的“必经之路”,它可以在该HTTP请
求传递到最终的“请求处理中心”(HttpHandler)进行处理之前做一些额外的工作或
在某些情况下终止HTTP请求
HttpModule有多个,每次HTTP请求都将逐一通过每个HttpModule
HttpModule和HttpAlication对象是直接交互的
HttpModule有多个,每次HTTP请求都将逐一通过每个HttpModule
HttpModule和HttpAlication对象是直接交互的
//类
pS:不想引用命名空间 可以把类的命名空间删除
namespace ch2
{
public class TestHttpModule : IHttpModule
{
//资源释放
public void Dispose()
{
throw new NotImplementedException();
}
//初始化工作
public void Init(HttpApplication context)
{
//初始化 context 绑定两个事件
context.BeginRequest += context_BeinRequest;
context.EndRequest += context_EndRequest;
}
//在请求处理之前,附加信息
public void context_BeinRequest(object sender,EventArgs e)
{
HttpApplication application = sender as HttpApplication;
application.Response.Write("<P>开始</P>");
}
//在请求处理之后,附加信息
public void context_EndRequest(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
application.Response.Write("<P>结束</P>");
}
}
}
//配置节点
以项目文件为起始点
<system.webServer>
<!--HttpModule对象-->
<modules>
<add name="test" type="ch2.TestHttpModule" />
</modules>
</system.webServer>
HttpHandler
每个HTTP请求都可能经过多个HttpModule处理,然而最终的处理中心是HttpHandler
一个HTTP请求最终是交给HttpHandler对象的ProcessRequest方法进行处理
与创建的HttpModule类不同
VS提供了创建HttpHandler类的模版即一般处理程序(.ashx)
//类
namespace ch2
{
public class TestHandler : IHttpHandler
{
public bool IsReusable
{
get
{
return false;
}
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
context.Response.Write("1111111111111111");
}
}
}
//配置节点
<system.webServer>
<handlers>
<add verb="=*" path="ad/*.aspx" name="handler" type="ch2.TestHandler"/>
</handlers>
</system.webServer>