⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httphandlers.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>HTTP 处理程序和工厂</h4>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#overview">概述</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#declaring">配置 HTTP 处理程序和工厂</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#customhandler">创建自定义 HTTP 处理程序</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#summary">本节小结</a><br>
</div>

<p>
<hr>


<!--BEGIN SECTION--> <a name="overview"><span class="subhead">概述</span>
<p>

ASP.NET 提供低级别的请求/响应 API,使开发人员能够使用 .NET 框架类为传入的 HTTP 请求提供服务。为此,开发人员需创作支持 <b>System.Web.IHTTPHandler</b> 接口和实现 <b>ProcessRequest()</b> 方法的类。当处理 HTTP 请求不需要由高级别的页框架抽象化提供的服务时,处理程序通常很有用。处理程序的常用用途包括筛选器和类似 CGI 的应用程序,尤其是那些返回二进制数据的应用程序。

<p>
ASP.NET 收到的每个传入 HTTP 请求最终由实现 <b>IHTTPHandler</b> 的类的特定实例来处理。<b>IHttpHandlerFactory</b> 提供了处理 <b>IHttpHandler</b> 实例 URL 请求的实际解析的结构。除了 ASP.NET 提供的默认 <b>IHttpHandlerFactory</b> 类外,开发人员还可以选择创建和注册工厂以支持大量的请求解析和激活方案。

<!--BEGIN SECTION--> <br> <a name="declaring"><br> <span class="subhead">配置 HTTP 处理程序和工厂</span>
<p>

HTTP 处理程序和工厂在 ASP.NET 配置中声明为 web.config 文件的一部分。ASP.NET 定义了一个 <b>&lt;httphandlers&gt;</b> 配置节,在其中可以添加和移除处理程序和工厂。子目录继承 <b>HttpHandlerFactory</b> 和 <b>HttpHandler</b> 的设置。
<p>

例如,在全局 machine.config 文件中,ASP.NET 将所有对 aspx 文件的请求映射到 <b>PageHandlerFactory</b> 类:

<div class="code"><pre>
&lt;httphandlers&gt;
  ...
  &lt;add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory,System.Web" /&gt;
  ...
&lt;/httphandlers&gt;
</pre></div>

<!--BEGIN SECTION-->

<a name="customhandler">

<span class="subhead">创建自定义 HTTP 处理程序</span>
<p>

下面的示例创建一个对所有“SimpleHandler.aspx”请求进行处理的自定义 <b>HttpHandler</b>。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/handler/CS/simplehandler.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/handler/handler.src"
  Icon="/quickstart/aspplus/images/simplehandler.gif"
  Caption="C# SimpleHandler"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/handler/VB/simplehandler.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/handler/handler.src"
  Icon="/quickstart/aspplus/images/simplehandler.gif"
  Caption="VB SimpleHandler"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/apps/handler/JS/simplehandler.aspx"
  ViewSource="/quickstart/aspplus/samples/apps/handler/handler.src"
  Icon="/quickstart/aspplus/images/simplehandler.gif"
  Caption="JScript SimpleHandler"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>
<p>


通过实现 <b>IHttpHandler</b> 接口可创建自定义 HTTP 处理程序,而该接口只包含两个方法。通过调用 <b>IsReusable</b>,HTTP 工厂可查询处理程序以确定是否可使用同一实例为多个请求提供服务。<b>ProcessRequest</b> 方法将 <b>HttpContext</b> 实例用作参数,这使它能够访问 <b>Request</b> 和 <b>Response</b> 内部对象。下面的示例忽略请求数据,并将一个常数字符串作为对客户端的响应发送。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
public class SimpleHandler : IHttpHandler {
  public void ProcessRequest(HttpContext context) {
    context.Response.Write("Hello World!");
  }

  public bool IsReusable {
    get {
      return true;
    }
  } 

}
</Tab>

<Tab Name="VB">
Public Class SimpleHandler : Inherits IHttpHandler
  Public Sub ProcessRequest(context As HttpContext)
    context.Response.Write("Hello World!")
  End Sub

  Public Function IsReusable() As Boolean
    Return(True)
  End Function
End Class
</Tab>

<Tab Name="JScript">
public class SimpleHandler implements IHttpHandler {
  public function ProcessRequest(context:HttpContext) : void {
    context.Response.Write("Hello World!");
  }

  public function IsReusable() : Boolean {
    return true;
  }
}
</Tab>

</Acme:TabControl><p>

将已编译的处理程序程序集放置在应用程序的 \bin 目录中后,处理程序类可以被指定为请求的目标。在本例中,对“SimpleHandler.aspx”的所有请求都被路由到 <b>SimpleHandler</b> 类的实例(它存在于命名空间 <b>Acme.SimpleHandler</b> 中)。

<div class="code"><xmp>
<httphandlers>
  <add verb="*" path="SimpleHandler.aspx" type="Acme.SimpleHandler,SimpleHandler" />
</httphandlers>
</xmp></div>

<p>

<h4><a name="summary">本节小结</a></h4>
<ol>
<li>HTTP 处理程序和工厂是 ASP.NET 页框架的主体。
<li>工厂将每个请求分配给一个处理程序,后者处理该请求。
<li>在 web.config 文件中定义工厂和处理程序。子目录继承工厂的设置。
<li>若要创建自定义处理程序,请实现 <b>IHttpHandler</b> 并在目录中 web.config 的 <b>&lt;httphandlers&gt;</b> 节中添加类。
</ol>
<p>

<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -