UrlRewrite之无后缀URL配置方法

作者:简简单单 2011-02-22
二:ihttpmodule的rewritepath方法
自己来,怎么来?用c++写个isapi会不会?答:不会。
还是老实的用.net写好了。
那就来点简单的了:从global.asax折腾到ihttphandle,折腾了半天,搞错了方向,转来转去还是在原地,后来经地的那么一搜,才发现了,路子要走还得往ihttpmodule上走。
用ihttpmodule很容易,很多人都用这个折腾,写个类继承自ihttpmodule,然后到配置文件里注册一下就可以了,示例如下:
1:新建类库项目:起名:urlrewrite
2:添加引用system.web,因为ihttpmodule在这名称空间下,而类库默认是没引用这个的
3:把class1.cs更名为urlrewrite.cs,并让类继承自ihttpmodule,实现接口,最终如下:
把着我们把代码小小调整一下如:
#region ihttpmodule 成员
public void dispose()
{
//throw new exception("the method or operation is not implemented.");
}
public void init(httpapplication context)
{
context.beginrequest += new eventhandler(context_beginrequest);
}
void context_beginrequest(object sender, eventargs e)
{
httpapplication app = (httpapplication)sender;
httpurlrewrite(app.context);
}
public void httpurlrewrite(httpcontext context)
{
string url = context.request.url.tostring();//用户请求的url
//--这里要做很多url逻辑处理
context.rewritepath("~/default.asp教程x", null,"url="+url);
}
#endregion
上面的代码,意思为:
将整个请求的url都当成参数送到default.aspx页面中,所有的请求都转化为default.aspx?url=www.cyqdata.com类似的方式
下面再建一个站点,来接受并输出结果:
4:添加新建网站起名:urlrewritedemo
ps教程:本来是要建应用程序的,怕大伙下载示例时打不开,所以示例用网站形式
5:添加对urlrewrite项目的引用
6:f5一下,调出web.config,然后在配置文件添加配置项代码如下:
< httpmodules>
< add name="urlrewrite" type="urlrewrite.urlrewrite,urlrewrite" />
< /httpmodules>
目前情况示例如图:
然后到default.aspx写一行代码输出接收到的参数:
protected void page_load(object sender, eventargs e)
{
response.write(request["url"]);
}
一切就绪,运行,我们看结果:
图1:请求默认存在的页面,输出结果,表示很正常
图2:随便请求一个不存在页面,输出了结果,表示也很正常
图3:请求一个连后缀都没有的url,输出了结果,表示有点惊讶
从图3看出,看来vs2005集成的iis对所有的请求都统一处理了,所以连无后缀的也能处理
重点说明:
对于以iis站点开发或最终部署来说,默认aspnet_isapi.dll是处理不了无后缀或图片等后缀的,因此,需要通过添加扩展“通用映射”能达到此功能。

相关文章

精彩推荐