zoukankan      html  css  js  c++  java
  • ASP.NET底层机制 (下) HttpHandler

    1.IHttpHandler接口
        定义了实现一个HttpRequest的处理所必须实现的一些系统约定方法。

        public interface IHttpHandler
        
    {
            
    //其他Request是否可以使用IHttpHandler
            bool IsReusable get; }

            
    //处理HttpRequest
            void ProcessRequest(HttpContext context);
        }

    NET为ASP.NET提供了很多系统默认HttpHandler类,用来适应不同类型的HttpRequest
        比如aspx,在machine.config中是这样定义的:    
            <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
                说明遇到aspx的Request,ASP.Net会将其交给System.Web.UI.PageHandlerFactory的HttpHandler类来处理
    如果自己定义了新的HttpHandler,而且在Web.config中指定,则系统只会使用这个新的HttpHandler,而不再使用原先指定的

    2.HttpHandler实现了IHttpHandler接口
        一个aspx页面在HttpHandler容器中的ProcessRequest方法才被系统真正的处理解析——即交给PageHandlerFactory处理,该工厂负责提供一个HttpHandler容器,由其处理HttpRequest

    3.如果要在HttpHandler容器中使用Session,必须要实现IRequiresSessionState接口——这只是一个空接口,一个标记

    using System;
    using System.Web;
    using System.Web.SessionState;

    namespace MyNamespace
    {
        
    public class MyHandler:IHttpHandler,IRequiresSessionState
        
    {
            
    public MyHandler() {}

            
    public bool IsReusable
            
    {
                
    get
                
    {
                    
    return true;
                }

            }


            
    public void ProcessRequest(HttpContext context)
            
    {
                HttpResponse response 
    = context.Response;
                HttpRequest request 
    = context.Request;

                HttpSessionState Session 
    = context.Session;
                Session[
    "test"= "hi";

                response.Write(
    "<b>Hello world!</b>");
                response.Write(Session[
    "test"]);
            }

        }

    }

    同时,还要在Web.config中加上声明:
       <httpHandlers>
            
    <add verb="*" path="*" type="MyNamespace.MyHandler,MyNamespace"></add>
       
    </httpHandlers>

    4.IHttpHandlerFactory
        待续。。。


  • 相关阅读:
    服务器资源共享--IIS站点/虚拟目录中访问共享目录(UNC)
    sql reiserror 输出错误
    使用xib方式创建UITableViewCell,设置Label自动换行注意事项
    原生的UITableViewCell高度自适应,textLabel自动换行显示
    屏幕截取-2种模式
    NSDictionary初始化,使用@{}方法,插入nil时会报空指针异常
    Unicode解码、URL编码/解码
    解决UITableView数据没有充满屏幕时,显示多余的空白cell的问题
    UITableView的分割线不满屏的解决方法
    动态获取UIWebView的真正高度
  • 原文地址:https://www.cnblogs.com/Jax/p/912958.html
Copyright © 2011-2022 走看看