在web.config文件里,有httpHandlers配置项,msdn对于此配置项的解释如下:
根据请求中指定的 URL 和 HTTP 谓词将传入的请求映射到相应的处理程序。可以在配置层次中的任何级别声明此元素。
简单的说,设置此值是为了实现url重定向。那么什么是url重定向以及为什么要做url重定向呢?我们举例进行说明:
假如你当前访问的网址是http://www.kingxy.com/hot/11.htm,那么你可能会认为在这个网站的hot目录下存在着11.htm这样一个文件,而实际上你却有可能根本找不到这个文件。因为实际上你看到的内容其实是http://www.kingxy.com/hotactive.aspx?id=11 ,url重定向即是截取传入的Web请求并自动将其重定向到其他 URL 的过程。
这样做的有如下好处:一是提升安全性,隐藏了参数”id”;二是缩短url,便于记忆,明显hto/11.htm 要比hotactive.aspx?id=11要更短小精悍,一眼就能记住;三是有利于增加对搜索引擎例如谷歌百度的友好度,从而可能会提升网站的收录和访问量。
那么如何在ASP.NET开发网站中实现url的重定向呢,主要可以分为如下三个步骤:
1,首先在网站项目中添加一个类,该类功能用来实现url的重写:
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.SessionState;
public class UrlHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//取出原rul地址
string absoluteUri = context.Request.Url.AbsoluteUri;
string query = context.Request.Url.Query;
if (!string.IsNullOrEmpty(query))
{
query = "&" + query.Substring(1);
}
//构造正则表达式
Regex regex =new Regex(“^http://[^/]*/hot/(?<id>[0-9]+).htm”, RegexOptions.IgnoreCase);
//按照正则表达式进行匹配
if (regex.IsMatch(absoluteUri))
{
Match match = regex.Match(absoluteUri);
//重写路径
context.Server.Transfer(string.Format("/hotactive.aspx?id={0}"+ query, match.Result(“${id}”));
}
}
// 实现“IHttpHandler”接口所必须的成员
public bool IsReusable
{
get
{
return false;
}
}
}
该类就是将htm静态页面实际上指向了一个aspx的动态页面,返回的结果实际是动态页面结果,而现实的url则是htm静态页面。
2,配置web.config httphandlers元素:
<httpHandlers>
<add verb="*" path="*.htm" type=" UrlHandler "/>
</httpHandlers>
verb属性说明了该handle所支持的http请求方式,例如支持post和get方式,verb属性则为"POST,GET";如果支持所有的请求方式,verb属性则用"*";path属性说明了对哪些文件的请求才调用该handle来处理,现在是对htm的文件,都要调用此handler进行处理;
type属性中指定了handle类的命名空间,类名和配件名(工程名)。ASP.NET runtime会首先到应用程序的bin目录下查找该配件的dll,如果没有找到再到GAC里查找。
3,配置网站:
IIS--》选中“默认网站”点右键--》选“属性”--》“主目录”--》“配置”--》点“映射”里的“添加”按钮--》 如图
浏览找到文件C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,扩展名为.htm,最后“确认文件是否存在”,默认是选上的,因为本网站没有这个文件,所以不能勾选上,最后确认就可以了。
至此,大功告成!





