zoukankan      html  css  js  c++  java
  • 处理程序

    
       必须实现
            IHttpHandler
            IHttpAsyncHandler接口
        定义
        public interface IHttpHandler
        {
            void ProcessRequest(HttpContext context);
            bool IsReusable{get;}//是否被缓冲,对应IHttpHandlerFactory使用
        }
        如果需要在处理程序中使用session则必须实现接口IRequiresSessionState接口
        处理程序工厂IHttpHandlerFactory,HttpApplication有对它的引用
            public interface IHttpHandlerFactory
            {
                IHttpHandler GetHandler{
                    HttpContext context,
                    string requestType,
                    string url,
                    string pathTranslated
                };//获取处理对象
                void ReleaseHandler{IhttpHandler handler};//释放
            }
        
        注册处理程序
            那为什么需要注册呢?
                因为有很多种不同的请求需要被处理
            在system.web配置元素的子元素httpHandlers来配置
                add
                    verb 通过一个逗号(,)分割的Http请求类型列表,例POST,GET,或者*代表全部
                    path 表示通过一个固定的URL路径或者一个使用星号(*)的通配符来匹配请求的URL,例如*.xu 代表处理所有后缀为xu的网页
                    type 处理程序的类型,格式为("命名空间.类名","程序集名称");
                    validate    如果设置为假,者在第一次匹配后,再不使用
                remove
                clear
            对于一般的处理处理程序来说,是不需要进行配置得到,因为系统已经为我们注册了,下面看定义
                <add
                    verb="*"
                    path="*.ashx"
                    type="System.web.UI.SimpleHandlerFactory"
                    validate=true
                />
                从上面这个配置节就可以看出来,拓展名为ashx的处理程序是被SimpleHandlerFactory进行管理的
                    SimpleHandlerFactory找到对应的ashx文件
                    通过反射得到类的实例
                    通过GetHandler返回实例给HttpApplication
                
            什么时候使用处理程序?
                在方法结果不是HTML的时候
        页面处理程序
                <add
                    verb="*"
                    path="*.aspx"
                    type="System.web.UI.PageHandlerFactory"
                    validate=true
                />
                PageHandlerFactory将寻找匹配请求名称的aspx文件,然后将这个模板文件进行解析,通过代码生成机制生成相应的页面类.
                    这个页面类派生自Page类
                需要注意的是,aspx模板的解析和代码生成仅仅出现在第一次处理的时候
            那么怎么创建的页面处理程序?
                通过一个类 PageParser来进行生成
                    >GetCompiledPageInstance()
                        >BuildManager
                            >CrateInstanceFromVirtualPath()
        MVC处理程序
            处理过程
                由一个处理程序通过一个控制器的工厂来取得实际的Controller(管理者)
                然后请求被路由到Controller中,分配给对象的Action完成实际的处理工作
                然后将处理的结果Modal传递给View
            在ASP.NET MVC2下 这个MVC的路由中心可以在routes.MapRoute方法中进行指定
        配置禁止访问的资源
                <add
                    verb="*"
                    path="*.cs"
                    type="System.web.HttpForbiddenHandler"
                    validate=true
                />
    Hold on, everything is possible.
  • 相关阅读:
    js保留几位小数
    IE的卸载之路(折腾1个多月,记录下。。)
    百度map
    鼠标滑轮事件监听,兼容各类浏览器
    sql server分页存储过程
    echarts(3.0)的基本使用(标签式导入)
    datagrid加分组后的效果
    python文件操作
    python求100以内素数
    python 三元运算符
  • 原文地址:https://www.cnblogs.com/student-note/p/6137365.html
Copyright © 2011-2022 走看看