当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net URL重写简化版 速学URL重写

ASP.NET
通过数据捆绑将数据添加到ASP.NET 页面
ASP.NET 2.0程序安全的基础知识
ASP.NET2.0的跨页回调
使用ASP.Net Forms模式实现WebService身份验证
asp.net 2.0中不同web控件之间的相互调用
如何于DataGridView控件中以跨数据行方式显示数据
图片地址防盗链,通过IHttpHandler实现
ACCESS在Web.config里设置连接字符串
asp.net 2.0 下的表单验证Cookieless属性
结合ASP.NET与JavaScript开发电子沙盘
理解ASP.NET与客户端缓存之HTTP协议
数据回发时,维护ASP.NET Tree控件位置
获得DataGridViewCheckBoxColumn的状态
GridView显示主细表并添加打开、关闭功能
ASP.NET 2.0防止同一用户同时登陆
asp.net中对数据库表插入null空值的问题
IIS运行不了ASP.NET的解决办法
ASP.NET实现投票结果的图片进度条显示
实例:asp.net生成曲线图的过程
ASP.NET2.0中TextBox的两个有趣的属性

ASP.NET 中的 asp.net URL重写简化版 速学URL重写


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 57 ::
收藏到网摘: n/a

asp.net URL重写(URLRewriter)简化版 。速学URL重写 在 asp.net 里实现 URL重写(URLRewriter)的一个最简单的方法。
参考了 (作者 Scott Mitchell 翻译:Janssen )的大作,虽然没有完全看明白,但是也照猫画虎地做了一个,颇有“成就”感。写出来分享一下。
原作里讲了很多的原理,这里就不说了(其实我也不懂)。这里就写操作过程吧。目的是实现一个最简单的能实现 URL重写 的程序。
1、需要设置一下IIS里的站点属性。
2、修改web.config的内容。
复制代码 代码如下:

<system.web>
<httpHandlers>
<add verb="*" path="*.zhtml" type="ZDIL.URLRewriter.RewriterFactoryHandler, ZDILURLRewriter" />
</httpHandlers>
</system.web>

其中*.zhtml 就是地址栏里面写的网页的扩展名,就是给用户看的,这个可以随意改(但是要符合扩展名的规则!)。当然要和第一步里面的设置相一致才行。
3、写一个类。
代码
复制代码 代码如下:

using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace ZDIL.URLRewriter
{
/**//// <summary>
/// URL重写
/// </summary>
public class RewriterFactoryHandler : IHttpHandlerFactory
{
/**//// <summary>
/// GetHandler is executed by the ASP.NET pipeline after the associated HttpModules have run. The job of
/// GetHandler is to return an instance of an HttpHandler that can process the page.
/// </summary>
/// <param name="context">The HttpContext for this request.</param>
/// <param name="requestType">The HTTP data transfer method (<b>GET</b> or <b>POST</b>)</param>
/// <param name="url">The RawUrl of the requested resource.</param>
/// <param name="pathTranslated">The physical path to the requested resource.</param>
/// <returns>An instance that implements IHttpHandler; specifically, an HttpHandler instance returned
/// by the <b>PageParser</b> class, which is the same class that the default ASP.NET PageHandlerFactory delegates
/// to.</returns>
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
string sendToUrl = url; //地址栏里面的地址
string filePath = pathTranslated;
string sendToURLString = "/web/index.aspx"; //真正要访问的页面
string queryString = ""; //参数。比如 ?id=123
filePath = context.Server.MapPath(sendToURLString); //物理地址
//这句最重要了。转向了。
context.RewritePath(sendToURLString, String.Empty, queryString);
return PageParser.GetCompiledPageInstance(url, filePath, context);
}
public virtual void ReleaseHandler(IHttpHandler handler)
{
}
}
}

这个类呢,要写在一个单独的项目里面,然后编译成 ZDILURLRewriter.DLL文件。(注意文件名,写错了就不能正常运行了)。
4、完成了。
打开IE ,在地址栏里输入 http://.../1.zhtml。
浏览者看到是一个静态页的地址,但是实际上访问的却是 /web/index.aspx 这个动态网页。
怎么样简单吧。
当然了,这个是最简单的,简单到了“不能用”的地步了。因为他会把所有的 *.zhtml 的访问都“重写”到 /web/index.aspx 。
至于把什么样的网页重写到哪个网页,这里就不介绍了(这里只讲方法,不讲实现的细节)。
方法很多了,原作是通过正则来匹配的,我是通过 string sendToUrl = url; 来判断的。
其他的就看你们的需要了。