asp.net地址映射——伪静态

王朝互联网·作者佚名  2012-04-23
窄屏简体版  字體: 小  |  中  |  大  |  超大  

asp.net地址映射 的定义是用户访问 的虚拟地址 映射的实际文件,虚拟地址可能是静态页面。如理:在访问http://fuzhou.naoqiu.com/bus页面, 其实访问的是/bus.aspx页面。

asp.net地址映射是通过 HttpModule请求原理来完成工作。

httpModule原理是什么?

一 个HTTP请求在HttpModule容器的传递过程中,会在某一时刻(ResolveRequestCache事件)将这个HTTP请求传递给 HttpHandler容器。在这个事件之后,HttpModule容器会建立一个HttpHandler的入口实例,但是此时并没有将HTTP请求控制 权交出,而是继续触发AcquireRequestState事件以及PreRequestHandlerExcute事件。在 PreRequestHandlerExcute事件之后,HttpModule窗口就会将控制权暂时交给HttpHandler容器,以便进行真正的 HTTP请求处理工作。

而在HttpHandler容器内部会执行ProcessRequest方法来处理HTTP请求。在容器 HttpHandler处理完毕整个HTTP请求之后,会将控制权交还给HttpModule,HttpModule则会继续对处理完毕的HTTP请求信 息流进行层层的转交动作,直到返回到客户端为止。

借用博友图片

了解完原理后,我来完成一个 简单的地址映射,代码如下:

首先先完成地址映射基类:

///<summary>

/// 地址重写

/// </summary>

public abstract class BaseModuleRewriter: IHttpModule

{

/// <summary>

/// 初始化调用

/// </summary>

/// <param name="app"></param>

public virtual void Init(HttpApplication app) {

app.BeginRequest += new EventHandler(app_BeginRequest);

}

public virtual void Dispose() { }

/// <summary>

/// 请求开始

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

protected virtual void app_BeginRequest(object sender, EventArgs e)

{

HttpApplication app = sender as HttpApplication;

Rewrite(app);

}

/// <summary>

/// 操作的抽象方法

/// </summary>

/// <param name="app"></param>

protected abstract void Rewrite(HttpApplication app);

}

继承基类,完成需要地址映射操作:

protected override void Rewrite(HttpApplication app)

{

HttpContext context = app.Context;

HttpRequest request = app.Request;

string part = Regex.Match(request.Url.ToString(), @"(?<=http\:\/\/).*").Value.ToLower().Trim('/');

if (part.IndexOf("/") == -1)

{

part = Regex.Match(part, @"^\w+").Value;

switch (part)

{

case "bus": context.RewritePath("/bus.aspx"); break;

case "www":

case "naoqiu": context.RewritePath("/Default.aspx"); break;

default: context.RewritePath("/Index_City.aspx"); break;

}

}

}

那么我们是否还差些什么? 是的,还差个配置文件的配置。需要修改web.config文件几处地方,代码如:

<!--请求规则-->

<httpModules>

<add name="BianminModuleRewriter"

type="Bianmin.URLRewriter.ModuleRewriter,Bianmin.URLRewriter" />

</httpModules>

<system.webServer>

<handlers>

<add name="aspnet_isapi" path="*" verb="*" modules="IsapiModule" script Processor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness64" />

</handlers>

<defaultDocument>

<files>

<clear />

<add value="default.aspx" />

</files>

</defaultDocument>

</system.webServer>

注意:当您使用framewore 2..0需要更改\aspnet_isapi.dll文件路径

源代码下载地址:http://download.naoqiu.com 下载

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航