博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
urlRewriter
阅读量:5146 次
发布时间:2019-06-13

本文共 3593 字,大约阅读时间需要 11 分钟。

 

  URL重写就是首先获得一个进入的URL请求,然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是"list.1html",那么它可以被重写成"list.aspx?id=1",这样的URL,这样的网址可以更好的被网站所阅读。

  1.首先新建一个WebApplication项目和一个类库(用于做URLRewrite)

  

  2.在index.aspx页面中添加一个按钮用于跳转到另外一个页面(跳转的链接为:list.1html)

  前台代码:

1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="URLRewriter.index" %> 2  3  4  5  6  7     
8 9 10 11
12
13
14
15
16 17

  后台代码:(跳转到list.1html这个链接)

1         protected void btnGo_Click(object sender, EventArgs e)2         {3             Response.Redirect("list.1html");4         }

  3.进行URL重写

    Module这个类库中新建一个类:Module.cs,用于URL的重写,首先我们要添加System.Web程序集的引用,之后实现IHttpModule接口

1     public class Module : IHttpModule 2     { 3         public void Dispose() 4         { } 5  6         ///  7         /// 初始化 8         ///  9         /// 10         public void Init(HttpApplication context)11         {12             //一个BeginRequest事件13             //当浏览器输入URL并跳转的时候,HTTPRequest开始14             //在请求开始的时候将会引发这个事件15             context.BeginRequest += context_BeginRequest;16         }17 18         /// 19         /// BeginRequest事件响应函数20         /// 21         /// 22         /// 23         void context_BeginRequest(object sender, EventArgs e)24         {25             //将sender转成HttpApplication对象26             HttpApplication app = sender as HttpApplication;27 28             //获得HTTP请求的路径,在这个例子中将会获得:"/list.1html"这样一个路径29             string requestPath = app.Context.Request.Path;30 31             //我们要获取路径的文件名,这里获得的是 "list.1html"32             string fileName = Path.GetFileName(requestPath);33 34             //判断文件名是否以"list."开头,如果是,我们将进行URL的重写35             if (fileName.StartsWith("list."))36             {37                 //获取文件的拓展名 ".1html"38                 string extention = Path.GetExtension(fileName);39 40                 //进行URL的重写,我们需要得到的是".1html"中的那个"1",而这个"1"的位数是不固定的41                 //有可能是"122312321.html"42                 //所以我们需要获取"."到"h"之间的那一段数字43                 //1.将"html"替换为空字符串,得到的是".1"44                 string target = extention.Replace("html", "");45                 //2.使用Substring方法取字串,从第一位开始取,一直取到最后一位46                 //target的值就为"1"47                 target = target.Substring(1);48                 //3.获得target值之后就可以重写URL了,在这里我们将"list.1html"重写成"list.aspx?id=1"49                 app.Context.RewritePath("list.aspx?id=" + target);50             }51         }

  4.重写完成之后,页面的请求会跳转到"list.aspx"页面

  后台代码,用来接收和输出传进来的参数

1  protected void Page_Load(object sender, EventArgs e)2         {3             if (Request.QueryString["id"] != null)4             {5                 string id = Request.QueryString["id"].ToString();6                 Response.Write(id);7             }8         }

  5.还有很重要的一步,就是在Web.config中要做相应的配置

1 
2
3
4
5
6
7
8
9
10
11

  其中, <add type="Module.Module,Module" name="MyModule" />节点中,name可以随便写,type中逗号前面是URL重写那个类的名称,就是

  "命名空间+类名":Module.Module

  

  逗号后面的是程序集的名称,也就是类库的名称:(Module)

  

  完成这些工作之后,在index.aspx中点击跳转按钮,本应该跳转到"list.1html"页面,而在我们的网站结构中是没有"list.1html"这个页面的,我们进行URL重写了之后,就跳转到了"list.aspx?id=1"

 

 

//基本原理:在请求管道中的第八个事件创建页面类对象之前,ReWritePath()就ok!

//第一:要实现IHttpModule接口;第二:改配置文件!

//另:IHttpModule接口中定义了两个方法:Init和Dispose。Init方法初始化一个模块,并为它做好处理请求的准备。这时,我们同意接受感兴趣的事件通知。Dispose方法处置该模块使用资源。Init方法接受一个服务该请求的HttpApplication对象的引用。使用该引用可以连接到系统事件。

转载于:https://www.cnblogs.com/sunet/p/3216898.html

你可能感兴趣的文章
C语言其他知识总结
查看>>
考勤系统 人员排班设置
查看>>
PHP获取自然周列表,周开始结束日期,月开始结束时间方法类
查看>>
汇编学习总结
查看>>
初识markdown
查看>>
jsp页面间传递参数 中文乱码问题(zz)
查看>>
计算科学的研究是什么?
查看>>
关于时钟频率
查看>>
网页生成图片快照
查看>>
php file_get_contents函数分段读取大记事本或其它文本文件
查看>>
WCF的https安全(ssl)访问实例
查看>>
vi查找替换命令详解
查看>>
bzoj1086 [SCOI2005]王室联邦 树分块
查看>>
20.网络编程
查看>>
SQL基础
查看>>
C++中公有继承、保护继承、私有继承的区别
查看>>
等价二叉查找树
查看>>
iOS使用StroryBoard页面跳转及传值
查看>>
第二阶段冲刺每日站立会议02
查看>>
kafka基础知识
查看>>