标签:添加 plc 有一个 模块 log htm handler 代码 binary
原文:ASP.NET WebAPI框架解析第二篇(HttpModule的创建和使用)
BeginRequest Asp.net处理的第一个事件,表示处理的开始
AuthenticateRequest 验证请求,一般用来取得请求用户的信息
PostResolveRequestCache 已经完成缓存的获取操作
……
EndRequest 本次请求处理完成
public interface IHttpModule
{
void Init(HttpApplication context);void Dispose();
}
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configuration.Routes.MapHttpRoute(name: "first",routeTemplate: "webapi/{controller}/{action}");
}
->客户端(在这里是浏览器)发起HTTP请求
->IIS Express接收到该请求
->IIS Express发现该请求路径不是已知的静态资源类型,进而把请求交给Asp.Net托管代码处理
->Asp.Net从HttpApplication池中取一个实例对象去处理该Http请求
->注册相应HttpModule模块,并调用Init()函数,这个时候HttpContext还没有形成,我们只能在这里注册相应的监听事件函数。
->HttpContext形成,HttpApplication实例对象内部的事件轮流触发,其中有一个PostMapRequestHandler事件,在这个事件触发后,会调用相应HttpHandler执行相应的处理,后面再说HttpHandler
->必要的事件触发完成之后生成Http报文并交由IIS Express返回给客户端
->客户端接受Http报文并解析显示在客户端中。
namespace WebHost.HttpModules
{
public class AuthorizeHttpModule : IHttpModule
{
public void Dispose()
{
return;
}public void Init(HttpApplication context)
{
//此时HttpContext还未构建完成,不能在这里操作HttpContext
//注册事件监听函数
context.BeginRequest += Authorize;
}
private void Authorize(object sender,EventArgs e)
{
HttpApplication app = sender as HttpApplication;if (app.Request.Headers.Get("name") != "HK")
{
//不加这一行客户端可能不能自动正确的解析字符编码
app.Response.Headers.Add("content-Type", "text/html;charset=utf-8");
//通过Write(string s)写入的字符串在内部默认被转换为utf-8编码。C#string默认编码为UTF-16
//要先写入原始的字符串编码,调用BinaryWrite(byte[] bytes)
app.Response.Write("验证不通过!");
app.CompleteRequest();
}
}
}
}
ASP.NET WebAPI框架解析第二篇(HttpModule的创建和使用)
标签:添加 plc 有一个 模块 log htm handler 代码 binary
原文地址:https://www.cnblogs.com/lonelyxmas/p/12499732.html