处理程序


   必须实现
        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
            />

 

posted @ 2016-12-06 14:04  夏风微凉  阅读(187)  评论(0编辑  收藏  举报