千家信息网

ASP.NET处理HTTP请求的流程是什么

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,这篇文章主要介绍"ASP.NET处理HTTP请求的流程是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"ASP.NET处理HTTP请求的流程是什么"文章能帮
千家信息网最后更新 2024年11月17日ASP.NET处理HTTP请求的流程是什么

这篇文章主要介绍"ASP.NET处理HTTP请求的流程是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"ASP.NET处理HTTP请求的流程是什么"文章能帮助大家解决问题。

一、ASP.NET处理管道

  • Asp.net处理管道的第一步是创建HttpWorkerRequest对象,它包含于当前请求有关的所有信息。

  • HttpWorkerRequest把请求传递给HttpRuntime类的静态ProcessRequest方法。HttpRuntime首先要做的事是创建HttpContext对象,并用HttpWorkerRequest进行初始化。

  • 创建了HttpContext实例之后,HttpRuntime类就通过调用HttpApplicationFactory的静态GetApplicationInstance()方法,为该应用程序请求HttpApplication派生类的一个示例。GetApplicationInstance()方法要么创建一个HttpApplication类的一个新实例,要么从应用程序对象池中取出一个实例。

  • 在创建完成HttpApplication实例之后,就对它进行初始化,并在初始化期间分配应用程序定义的所

  • 有模块。模块式实现IHttpModule接口的类,作用就是为了实现那经典的19个标准处理事件。

  • 在创建了模块之后,HttpRuntime类通过调用它的BeginProcessRequest方法,要求最新检索到的HttpApplication类对当前请求提供服务。然后,为当前请求找到合适的处理程序工厂。

  • 创建处理程序,传递当前HttpContext,一旦ProcessRequest方法返回,请求完成。

二、IHttpHandler

HttpHandler是asp.net真正处理Http请求的地方。在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

当一个HTTP请求经过HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是"覆盖"关系。

应用1:图片防盗链(实现一个自定义的IHttpHandler)

第一:定义一个实现了IHttpHandler的类,并且实现其ProcessRequest方法。在一个HttpHandler容器中如果需要访问Session,必须实现IRequiresSessionState接口,这只是一个标记接口,没有任何方法。

public class PictureHttpHandler : IHttpHandler{    public bool IsReusable    {        get { return true; }    }    public void ProcessRequest(HttpContext context)    {        //站点的域名        string myDomain = "localhost";        if (context.Request.UrlReferrer == null ||            context.Request.UrlReferrer.Host.ToLower().IndexOf(myDomain) < 0)        {            //如果是通过浏览器直接访问或者是通过其他站点访问过来的,则显示"资源不存在"图片            context.Response.ContentType = "image/JPEG";            context.Response.WriteFile(context.Request.PhysicalApplicationPath + "/images/noimg.jpg");        }        else        {            //如果是通过站内访问的,这正常显示图片            context.Response.ContentType = "image/JPEG";            context.Response.WriteFile(context.Request.PhysicalPath);        }    }}

第二:在web.config中注册这个类,并且指定Handler处理的请求类型,把此节点插入system.web节点中

           

正常访问default页面时:

通过图片地址直接访问时:

应用2、生成验证码

public class ValidateCodeHttpHandler : IHttpHandler{    public void ProcessRequest(HttpContext context)    {        context.Response.ContentType = "image/gif";        //建立Bitmap对象,绘图                Bitmap basemap = new Bitmap(200, 60);        Graphics graph = Graphics.FromImage(basemap);        graph.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);        Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);        Random r = new Random();        string letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ";        string letter;        StringBuilder s = new StringBuilder();        //添加随机的五个字母                for (int x = 0; x < 5; x++)        {            letter = letters.Substring(r.Next(0, letters.Length - 1), 1);            s.Append(letter);            graph.DrawString(letter, font, new SolidBrush(Color.Black), x * 38, r.Next(0, 15));        }        //混淆背景                Pen linePen = new Pen(new SolidBrush(Color.Black), 2);        for (int x = 0; x < 6; x++)            graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)),                new Point(r.Next(0, 199), r.Next(0, 59)));        //将图片保存到输出流中                      basemap.Save(context.Response.OutputStream, ImageFormat.Gif);        //context.Session["CheckCode"] = s.ToString();           //如果没有实现IRequiresSessionState,则这里会出错,也无法生成图片                 context.Response.End();    }    public bool IsReusable    {        get { return true; }    }}

把下面的项加到web.config中的httphandler节点中:

访问validatevode时:

三、自定义HttpModule:

每次请求的开始和结束定义的HttpModule。

在Asp.net中,创建在System.Web命名空间下的IHttpModule接口专门用来定义HttpApplication对象的事件处理。实现IHttpModule接口的类称为HttpModule(Http模块)。

1、通过IHttpModule创建HttpApplication的事件处理程序

public class ModuleExample : IHttpModule{    public void Init(System.Web.HttpApplication application)    {        application.PostAuthenticateRequest += (sender, args) =>         {             HttpContext context = ((HttpApplication)sender).Context;             context.Response.Write("请求PostAuthenticate");         };        application.BeginRequest += (sender, args) =>        {            HttpContext context = ((HttpApplication)sender).Context;            context.Response.Write("请求到达");        };        application.EndRequest += (sender, args) =>        {            HttpContext context = ((HttpApplication)sender).Context;            context.Response.Write("请求结束");        };    }    public void Dispose()    {        throw new NotImplementedException();    }}

2、注册HttpModule

在Asp.net中,实现IHttpModule接口只是实现HttpModule的第一步,在Asp.net中所使用的HttpModule还必须在网站配置文件中进行注册才能真正生效,并在Asp.net中使用。

              

3、常见的HttpModule

在Asp.net中,已经预定义了许多HttpModule,甚至已经在服务器的网站配置文件中进行了注册,在系统文件夹C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config中看到已经注册的HttpModule如下:

                                                                 

关于"ASP.NET处理HTTP请求的流程是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

处理 方法 图片 接口 程序 对象 应用 实例 容器 模块 流程 事件 信息 应用程序 文件 知识 节点 服务 不同 只是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 ir图库数据库 软件开发职业经理人述职报告 网络安全专业的毕业设计题目 西安利通网络技术有限公司招聘 计算机网络技术实训报告带截图 两个数据库服务器怎么连 菜鸟包裹侠服务器响应超时怎么办 华为a300 gpu服务器 工业软件开发慢了30年 信息网络安全模拟考试 学习软件开发学习哪种语言 如何评估一个数据库性能 朋友局软件开发 双路机架服务器公司 贵州畅捷通软件开发商 美国做大的网络安全公司 通信网络安全行业 数据库介绍里的文献深度 永定区抖抖网络技术服务部 公安采购网络安全防护申请 服务器的加密卡怎么安装 5g对安卓软件开发 软件开发公司业务员洽谈技巧 删除服务器根目录的后果 武冈计算机网络技术哪里好 apex 启动服务器中 数据库管理能绘图吗 西安高新网络安全 车载服务器 数据采集和发送 电竞酒店需要什么电脑服务器
0