ASP.NET中实现HTTP请求


  本文标签:实现HTTP请求 ASP.NET

  ASP.NET中实现HTTP请求

  应该指出的是,并不是所有的应用程序集DLL都能实现HTTP请求/响应模式  。还是来看一下Microsoft Asp.Net快速入门教程中关于"Http 处理程序和工厂"的描述:

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

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

  从这段文字可以看出,当aspx页面不涉及  。net框架提供的高级界面技术(如数据缓存、状态保持、Web窗体控件引用等等)时,且向客户端输出的不是复杂的HTML文本,特别是只向客户端返回二进制数据(如图片,声音等)时,可以用一个  。cs应用程序文件(本文使用c#语言,如果是用VB或 JScript,……)来替代,而该应用程序必须有一个实现 System.Web.IHTTPHandler 接口和并实现 ProcessRequest() 方法的类  。一个简单的例子如下:

  1. public bool IsReusable  
  2. {  
  3. get  { return true; }  
  4. }  
  5.  
  6. public void ProcessRequest(HttpContext context)  
  7. {  
  8. HttpResponse res = context.Response;  
  9.  
  10. res.Write("<html><body>");  
  11. res.Write("<h1>DllTest - Ex1(例1)h1><hr>");  
  12. res.Write("本页面直接由DLL处理");  
  13. 1 res.Write("html>body>");  
  14. }  

  在命令行状态,用如下的编译命令把ex1.cs编译成ex1.dll,并把它存放在bin目录下  。

  csc /t:library /out:bin\ex1.dll ex1.cs
可以但要写全路径
csc /t:library /out:j:\WebSite\WebTest\bin\ex1.dll
J:\WebSite\WebTest\App_Code\ex1.cs

  在配置文件web.config中添加aspx->dll映射,添加后,web.config应该是这样子的:

  

  1. xml version="1.0"?> 
  2. <configuration> 
  3. <system.web> 
  4. <httpHandlers> 
  5. <add verb="*" path="dlltest1.aspx" type="DllTest.ex1Page,ex1" /> 
  6. httpHandlers> 
  7. system.web> 
  8. configuration> 

  现在当浏览器访问http://localhost/dlltest/dlltest1.aspx时,实际上就是调用了ex1.dll中DllTest.Ex1Page类的ProcessRequest方法,在浏览中应该可以看到一个简单的页面  。以上介绍ASP.NET中实现HTTP请求