惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Spread Privacy
Spread Privacy
H
Hacker News: Front Page
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
罗磊的独立博客
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
美团技术团队
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
The Register - Security
The Register - Security
IT之家
IT之家
WordPress大学
WordPress大学
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Help Net Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
NISL@THU
NISL@THU
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
B
Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
S
Security Affairs
小众软件
小众软件
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
A
Arctic Wolf
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence

博客园 - Laeb

ASP.NET Web 页面语法概览 ASP.NET Web 页面中的新事物 渐增的许可 介绍 ASP.NET Web 页面 管理工具 ASP.NET Web 页面概览 检测何时需要更改安全策略 安全策略管理的概览 System.Net 类的最佳习惯 异常处理的最佳习惯 面向世界应用程序开发的最佳习惯 使用 ASP.NET 所创建的 XML Web 服务的设计指南 为并发执行而创建应用程序与组件的指南 ASP.NET 控件与可访问 ASP.NET 中的可访问支持 实践:创建自定义 HTTP 模块 HTTP 模块介绍 实践:注册 HTTP 处理器 实践:创建同步 HTTP 处理器
实践:创建 HTTP 处理器工厂
Laeb · 2007-03-18 · via 博客园 - Laeb

接口 IHttpHandlerFactory 负责创建并且管理用来处理请求的 HTTP 处理器。事实上这也是有可能的,因此,你可以创建一个实现了 IHttpHandlerFactory 接口的类,然后把这个类当成 HTTP 处理器来使用。这可以允许优秀的控件把 URL 映射到一个基于复杂的条件集来创建不同处理器的 HTTP 处理器工厂,从而能够越过 HTTP 请求的处理。例如,通过使用 HTTP 处理器工厂,你能够创建有限数量的 HTTP 处理器对象来访问昂贵的或者有限的资源(比如数据库连接),然后在将来的请求中重用这些处理器对象。

在下列范例中,一个 HTTP 处理器工厂就创建了用来识别 *.sample 资源的两个处理器,并且分别用于 HTTP GET 请求和 HTTP POST 请求。代码中首先出现的是一个在[实践:创建同步 HTTP 处理器]中被创建的处理器实例;然后就是一个在[实践:创建异步 HTTP 处理器]中被创建的处理器实例。

创建自定义 HTTP 处理器工厂

创建一个名为 HandlerFactory 的 HTTP 处理器工厂类
  1. 在你的 Web 站点的 App_Code 目录中创建一个名为 HelloWorldHandler 的类。
  2. 添加下列代码到你的类文件中。
    using System;
    using System.Web;
    
    class HandlerFactory : IHttpHandlerFactory
    {
        public IHttpHandler GetHandler(HttpContext context, 
            string requestType, String url, String pathTranslated)
        {
            IHttpHandler handlerToReturn;
            if ("get" == context.Request.RequestType.ToLower())
            {
                handlerToReturn = new HelloWorldHandler();
            }
            else if ("post" == context.Request.RequestType.ToLower())
            {
                handlerToReturn = new HelloWorldAsyncHandler();
            }
            else
            {
                handlerToReturn = null;
            }
            return handlerToReturn;
        }
        public void ReleaseHandler(IHttpHandler handler)
        {
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    该代码实现了 IHttpHandlerFactory 接口的 GetHandler 方法并且在出现 GET 请求的时候返回被创建的同步处理器。如果出现 POST 请求,那么它将返回异步的处理器接口。

创建自定义 HTTP 处理器

自定义 HTTP 处理器工厂既可以返回在[实践:创建同步 HTTP 处理器]中所创建的同步处理器又可以返回在[实践:创建异步 HTTP 处理器]中所创建的异步处理器。因此你必须同时创建同步的 HelloWorldHandler 类和异步的 HelloWorldAsyncHandler 类才能够让自定义的 HTTP 处理器工厂正确地返回这些处理器。

创建 HelloWorldHandler 类和 HelloWorldAsyncHandler 类
  1. 在你的 Web 站点的 App_Code 目录中创建一个名为 HelloWorldHandler 的类。
  2. 添加[实践:创建同步 HTTP 处理器]中的代码到这个类文件。
  3. 在你的 Web 站点的 App_Code 目录中创建一个名为 HelloWorldAsyncHandler 的类。
  4. 添加[实践:创建异步 HTTP 处理器]中的代码到这个类文件。

注册一个自定义的 HTTP 处理器工厂

在你创建完自定义 HTTP 处理器工厂类之后,你就必须把它注册到你的 Web 站点的 Web.config 文件中。这允许 ASP.NET 使用该处理器工厂类来为扩展名是 .sample 的资源请求而提供服务。

在 Web.config 文件中注册一个自定义的 HTTP 处理器
  1. 添加一个 Web.config 文件到你的 Web 站点中,如果该文件不存在的话。
  2. 添加下列元素到 Web.config 文件中。
    <configuration>
      <system.web>
        <httpHandlers>
          <add verb="GET,POST" path="*.sample"
            type="HandlerFactory" />
        </httpHandlers>
      </system.web>
    </configuration>

    该代码以类名称和 HandlerFactory 的处理器名称来注册处理器。

在 IIS 6.0 中配置 HTTP 处理器扩展

Internet Information Services(IIS)只会把特定文件类型的请求传递给 ASP.NET 的服务。默认时,拥有扩展名 .aspx,.ascx 和 .asmx 的文件已经在 IIS 6.0 中被映射到了 ASP.NET ISAPI 扩展(Aspnet_isapi.dll)。因此,如果你需要 ASP.NET 来处理自定义的 URL 扩展的话,那么你就必须在 IIS 中映射这些扩展名。关于更多信息,请参考:[ASP.NET 生命周期]。

在 IIS 6.0 中把文件扩展名 .sample 映射到 ASP.NET
  1. 打开 Internet Information Services(IIS)Manager。
  2. 右击你的应用程序名称,然后点击 Properties。

    提示:关于创建 ASP.NET 应用程序的指导,请参考:[实践:在 IIS 中创建并且配置本地 ASP.NET Web 站点]。

  3. 点击 Virtual Directory 标签,然后点击 Configuration。
  4. 在 Mappings 标签中点击 Add。

    Add/Edit Application Extension Mapping 对话框将会出现。

  5. 在 Executable 文本框中,输入或者浏览文件 Aspnet_isapi.dll。默认时,该文件位于下列位置。
    %windows%\Microsoft.NET\Framework\版本号\

    提示:你可以从其他映射那里得到完整的路径和文件名,比如 .aspx 文件的映射。

  6. 在 Extension 文本框中输入 .sample。
  7. 清除 Verify that file exists 复选框。
  8. 点击 OK 然后关闭 IIS Manager。

测试自定义的 HTTP 处理器工厂

在你创建并且注册了你的自定义 HTTP 处理器工厂之后,你就可以通过创建一个能够请求 .sample 资源的 HTML 页面来对它进行测试。

测试你的自定义 HTTP 处理器工厂
  1. 在你的应用程序中创建一个 HTML 页面(以 .htm 作为文件扩展名)。
  2. 在页面的 body 部分,添加下列代码。
    <form action="Sample.sample" method="get">
      <input type="submit" value="Submit to Sample.sample via Get" />
    </form>
    <br />
    <form action="Sample.sample" method="post">
      <input type="submit" value="Submit to Sample.sample via Post" />
    </form>
  3. 在你的浏览器中请求这个 HTML 页面。
  4. 点击其中一个按钮。

    如果你点击的是第一个按钮,那么 HTTP 处理器工厂就会创建并且调用一个同步 HTTP 处理器来对请求产生回应。如果你点击的是第二个按钮,那么 HTTP 处理器工厂就会创建并且调用一个异步 HTTP 处理器来对请求产生回应。