asp.net地址映射——伪静态
来源:互联网 发布:vue服务端渲染java 编辑:程序博客网 时间:2024/05/29 02:53
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文件几处地方,代码如:
源代码下载地址:http://download.naoqiu.com 下载
<!--请求规则-->
<httpModules>
<add name="BianminModuleRewriter" type="Bianmin.URLRewriter.ModuleRewriter,Bianmin.URLRewriter" /></httpModules>
<system.webServer>
<handlers>
<add name="aspnet_isapi" path="*" verb="*" modules="IsapiModule" scriptProcessor="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文件路径
- asp.net地址映射——伪静态
- ASP.NET伪静态
- ASP.NET 伪静态
- asp.net伪静态
- ASP.NET伪静态
- ASP.NET伪静态
- asp.net伪静态
- ASP.NET 路由重写——伪静态
- ASP.NET中实现访问链接的静态地址映射
- ASP.NET中实现访问链接的静态地址映射
- asp.net实现伪静态
- asp.net实现伪静态
- asp.net url 伪静态
- asp.net实现伪静态
- asp.net实现伪静态
- asp.net实现伪静态
- asp.net实现伪静态
- ASP.NET中的伪静态
- 每日一练
- ZOJ 1094_Matrix Chain Multiplication
- svm资源
- 经典 Javascript 正则表达式
- cygwin下把window下dll文件转换成a或者so文件的方法
- asp.net地址映射——伪静态
- 基于多特征集成的图像自动标注方法研究
- UNIX 高手的 10 个习惯
- Ubuntu下Hadoop快速安装手册
- UNIX 高手的另外 10 个习惯
- counter
- 自定义除零异常!
- Orange's 一个操作系统的实现之笔记1
- Barcelona Dataset for Multi-label Image Annotation