ASP.NET 基础结构HTTP 处理程序和HTTP 模块

本文介绍ASP.NET中的HTTP处理程序与HTTP模块的概念及应用,包括如何创建自定义处理程序来响应特定文件请求,以及如何利用HTTP模块实现请求的安全检查、统计信息收集等功能。

ASP.NET 提供了一个您可用于创建 Web 应用程序的框架。此框架包括了一些服务,如状态管理、HTTP 处理程序、HTTP 模块和 ASP.NET 路由。

 

  1. HTTP 处理程序和HTTP 模块

ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序的请求而运行的过程(通常称为"终结点")。最常用的处理程序是处理 .aspx 文件的 ASP.NET 页处理程序。用户请求 .aspx 文件时,页通过页处理程序来处理请求。您可以创建自己的 HTTP 处理程序将自定义输出呈现给浏览器。

自定义 HTTP 处理程序通常具有以下用途:

  • RSS 若要为网站创建 RSS 源,可以创建一个可发出 RSS 格式 XML 的处理程序。然后可以将文件扩展名(如 .rss)绑定到此自定义处理程序。当用户向站点发送以 .rss 结尾的请求时,ASP.NET 将调用您的处理程序来处理请求。

    也即,如果你网站提供了一种如abc.luminji(即以luminji为后缀名)的文件格式,你需要提供一个自定义HTTP处理程序来处理这类文件的请求。

  • 图像服务器 如果希望 Web 应用程序能够提供不同大小的图像,可以编写一个自定义处理程序来调整图像大小,然后将调整后的图像作为处理程序的响应发送给用户。

HTTP 模块是一个在每次针对应用程序发出请求时调用的程序集。HTTP 模块作为 ASP.NET 请求管道的一部分调用,它们能够在整个请求过程中访问生命周期事件。HTTP 模块使您可以检查传入和传出的请求并根据该请求进行操作。

HTTP 模块通常具有以下用途:

  • 安全 因为您可以检查传入的请求,所以 HTTP 模块可以在调用请求页、XML Web services 或处理程序之前执行自定义的身份验证或其他安全检查。在以集成模式运行的 Internet 信息服务 (IIS) 7.0 中,可以将 Forms 身份验证扩展到应用程序中的所有内容类型。
  • 统计信息和日志记录 因为 HTTP 模块是在每次请求时调用的,所以,您可以将请求统计信息和日志信息收集到一个集中的模块中,而不是收集到各页中。
  • 自定义的页眉或页脚 因为您可以修改传出响应,所以可以在每一个页面或 XML Web services 响应中插入内容,如自定义的标头信息。

HTTP IHttpHandler IHttpAsyncHandler 接口是开发异步处理程序的起始点。 IHttpModule 接口是开发处理程序和模块的起始点。 处理程序和模块功能包括:

  • 自定义处理程序和模块源代码可以放在应用程序的 App_Code 文件夹中,也可以在应用程序的 Bin 文件夹中编译和存放。
  • 为在 IIS 6.0 中使用而开发的处理程序和模块经过少许更改或不经更改即可在 IIS 7.0 中使用。有关更多信息,请参见
    ASP.NET 应用程序从 IIS 6.0 迁移到 IIS 7.0
  • 模块可以订阅多种请求管道通知。模块可以接收 HttpApplication 对象的事件通知。
  • IIS 7.0 中,请求管道与 Web 服务器请求管道集成在一起。HTTP 模块可用于对 Web 服务器的任何请求,而不仅仅是 ASP.NET 请求。

 

  1. 同步HTTP 处理程序

App_Code 目录中,创建一个名为 HelloWorldHandler 的类,并将下面的代码添加到类文件中:

using System.Web;

public class HelloWorldHandler : IHttpHandler

{

public HelloWorldHandler()

{

}

public void ProcessRequest(HttpContext context)

{

HttpRequest Request = context.Request;

HttpResponse Response = context.Response;

// This handler is called whenever a file ending

// in .sample is requested. A file with that extension

// does not need to exist.

Response.Write("<html>");

Response.Write("<body>");

Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");

Response.Write("</body>");

Response.Write("</html>");

}

public bool IsReusable

{

// To enable pooling, return true here.

// This keeps the handler in memory.

get { return false; }

}

}

 

将下面突出显示的元素添加到 Web.config 文件中。

<httpHandlers>

<add verb="*" path="*.sample" type="HelloWorldHandler"/>

</httpHandlers>

 

  1. 异步HTTP 处理程序

App_Code 目录中,创建一个名为 HelloWorldAsyncHandler的类,并将下面的代码添加到类文件中:

using System;

using System.Web;

using System.Threading;

 

class HelloWorldAsyncHandler : IHttpAsyncHandler

{

public bool IsReusable { get { return false; } }

 

public HelloWorldAsyncHandler()

{

}

public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)

{

context.Response.Write("<p>Begin IsThreadPoolThread is " + Thread.CurrentThread.IsThreadPoolThread + "</p>/r/n");

AsynchOperation asynch = new AsynchOperation(cb, context, extraData);

asynch.StartAsyncWork();

return asynch;

}

 

public void EndProcessRequest(IAsyncResult result)

{

}

 

public void ProcessRequest(HttpContext context)

{

throw new InvalidOperationException();

}

}

 

class AsynchOperation : IAsyncResult

{

private bool _completed;

private Object _state;

private AsyncCallback _callback;

private HttpContext _context;

 

bool IAsyncResult.IsCompleted { get { return _completed; } }

WaitHandle IAsyncResult.AsyncWaitHandle { get { return null; } }

Object IAsyncResult.AsyncState { get { return _state; } }

bool IAsyncResult.CompletedSynchronously { get { return false; } }

 

public AsynchOperation(AsyncCallback callback, HttpContext context, Object state)

{

_callback = callback;

_context = context;

_state = state;

_completed = false;

}

 

public void StartAsyncWork()

{

ThreadPool.QueueUserWorkItem(new WaitCallback(StartAsyncTask), null);

}

 

private void StartAsyncTask(Object workItemState)

{

 

_context.Response.Write("<p>Completion IsThreadPoolThread is " + Thread.CurrentThread.IsThreadPoolThread + "</p>/r/n");

 

_context.Response.Write("Hello World from Async Handler!");

_completed = true;

_callback(this);

}

}

 

将下面突出显示的元素添加到 Web.config 文件中。

<httpHandlers>

<add verb="*" path="*.SampleAsync" type="HelloWorldAsyncHandler"/>

</httpHandlers>

 

  1. 创建自定义HTTP 模块

App_Code 目录中,创建一个名为 HelloWorldModule.cs(对于 C#)的类文件。

using System;

using System.Web;

public class HelloWorldModule : IHttpModule

{

public HelloWorldModule()

{

}

 

public String ModuleName

{

get { return "HelloWorldModule"; }

}

 

// In the Init function, register for HttpApplication

// events by adding your handlers.

public void Init(HttpApplication application)

{

application.BeginRequest +=

(new EventHandler(this.Application_BeginRequest));

application.EndRequest +=

(new EventHandler(this.Application_EndRequest));

}

 

private void Application_BeginRequest(Object source,

EventArgs e)

{

// Create HttpApplication and HttpContext objects to access

// request and response properties.

HttpApplication application = (HttpApplication)source;

HttpContext context = application.Context;

string filePath = context.Request.FilePath;

string fileExtension =

VirtualPathUtility.GetExtension(filePath);

if (fileExtension.Equals(".aspx"))

{

context.Response.Write("<h1><font color=red>" +

"HelloWorldModule: Beginning of Request" +

"</font></h1><hr>");

}

}

 

private void Application_EndRequest(Object source, EventArgs e)

{

HttpApplication application = (HttpApplication)source;

HttpContext context = application.Context;

string filePath = context.Request.FilePath;

string fileExtension =

VirtualPathUtility.GetExtension(filePath);

if (fileExtension.Equals(".aspx"))

{

context.Response.Write("<hr><h1><font color=red>" +

"HelloWorldModule: End of Request</font></h1>");

}

}

 

public void Dispose() { }

}

 

将下面突出显示的元素添加到 Web.config 文件中。

<httpModules>

<add name="HelloWorldModule" type="HelloWorldModule"/>

</httpModules>

 

转自:http://www.cnblogs.com/luminji/archive/2010/11/24/1886286.html

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据技术支持。; 适合人群:具备一定自动控制理论基础Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值