asp.net利用自定义Http处理程序实现URL伪静态之初探

原创 2015年07月08日 11:59:13

之前在做过的一个项目中,也实现了伪静态URL页面的办法,不过那是利用URLRewriter.dll并需要通过配置IIS才得以实现,而且通过这个方法实现还有不少要求,但在实际过程中,服务器我们是买别人家公司的,并不能实现登录虚拟机进行配置IIS,甚至如果服务器供应商都不提供有支持.framework 4.0,那这实现又从何说起?!


    近日看了一些HTTP管道的文章,看了上面的例子,突然想到,既然asp.net请求是通过Http管道来处理的,那为何不用它来实现伪静态化呢?于是就动手写了一个例子,发现结果还是可以的,所以拿出来分享一下:


    实现自定义的Http管道处理程序我们需要自己定义一个继承IHttpHandler接口的类,主要实现一个方法跟一个属性,例如,我定义了一个Redir类:


<pre name="code" class="csharp">public class Redir :IHttpHandler
    {
        /// <summary>
        /// 当有重复的请求时,是否重用这个资源对象
        /// </summary>
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }

        /// <summary>
        /// 请求进程处理
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest( HttpContext context )
        {
            string RawUrl = context.Request.RawUrl; //获取当前请求原始URL

            //因为后缀为.html或是.shtml和.htm,我们需要进行截取并根据'-'进行分段,以便获得参数值
            string[] Paras = RawUrl.Substring( 0, RawUrl.IndexOf( '.' ) ).Split( new char[] { '-', '/' }, StringSplitOptions.RemoveEmptyEntries );
            string RebulidParas = "";

            //根据获得参数的数量进行相应的处理
            switch ( Paras.Length )
            {
                case 2:
                    RebulidParas = "?name=" + Paras[1];
                    break;
                case 3:
                    RebulidParas = "?name=" + Paras[1] + "&id=" + Paras[2];
                    break;
                default:
                    break;
            }

            //然后在服务器内部进行重新发送这个转化过的url,注意后缀恢复成了原来的.aspx,
            context.Server.Transfer( Paras[0] +".aspx" + RebulidParas  );
        }
    }



然后在Web.Config文件中进行注册这个HttpHandler

<system.web>
	<httpHandlers>
		<add verb="*" path="*.shtml" type="空间名.类名,程序集名"/>
	</httpHandlers>
</system.web>	


这个类其实处理过程很简单:

    就是当有一个后缀不为.aspx的请求发送到这个HttpHandler后,假设有一个请求如下:http://www.***.com/Article-dpan-20.shtml

    这个请求发送过来,能过上下文对象中的Request.RawUrl我们可以得到一个原始请求:/Article-dpan-20.shtml

    后缀部份,我们不要,进行截尾处理变成/Article-dpan-20。然后我们需要做的就是根据'-'分隔的参数值获取出来,所以通过String.Split方法,分割成了:

(1)/Article

(2)dpan

(3)20

   剩下的工作就好做了,重新进行拼接起来就行了,所以变成了,/Article.aspx?name=dpan&id=20。通过内部转移Transfer方法将这个URL发送给对应的指定页面就OK了。


   这种重写的方法显然没有那种 /Article/dpan/20.html 这种形式来得优雅,我也尝试着进行转化处理,发现有几个问题没办法处理:

   (1)因为网站后台使用的是在线的HTML编辑器,这种编辑器会有自带的生成的.html页面,如果后缀使用了.html来进行伪静态,导致后台HTML编辑器无法正常使用。

   (2)在注册httpHandlers中的path属性,并不能认可像 /Article/*/*.shtml 这种形式的路径请求,个人猜测是在WindowForm开发下,文件映射的问题吧,具体的还没有仔细研究过,也对Web.Config研究不深,还需仔细去找资料查看看。

   

    目前通过这种形式来实现伪静态化也算是能满足一些需求吧,因为之前的网站,要不是客户自己买有云服务器,可以登录上去进行配置IIS,我都不知道如何在我们自己服务器供应商提供的只支持.framework 3.5而且也不准配置IIS这种情况下实现伪静态化了,现在通过这个自定义的扩展Http程序,也算是可以做到了。

    

   但我有找到很多人介绍说通过HttpModules截获Http请求进行处理,而且HttpModules是可以调用好几个的的,而HttpHandles只能调用一个。具体的还没有去研究过,接下来又有得忙啦!




版权声明:本文为博主原创文章,未经博主允许不得转载。

ASP.NET 实现伪静态网页方法

方法一:利用Httphandler实现URL重写(伪URL及伪静态) 我们有时候会见到这样的地址:“http://www.huoho.com/show-12-34.html”,你或许认为在站点服...
  • jxqvip
  • jxqvip
  • 2011年08月23日 10:51
  • 26561

将asp.net页面弄成伪静态页面

在Web.config中写:                     ~/index.html             //索要更改的页面         ~/index.as...
  • linlin2294592017
  • linlin2294592017
  • 2013年10月30日 17:26
  • 1312

ASP.NET伪静态页面的实现和伪静态在IIS7.0中的配置

ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置 最近在写一个CMS的内容管理系统,需要用到一个伪静态方面的方法,在网上找了一下这方面的资料,现将这方面的资源记录一下。 本机环...
  • y_124882511
  • y_124882511
  • 2012年03月08日 14:59
  • 4484

为什么要把网站的URL做成伪静态?

伪静态就是动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。伪静态有2种生成方式,一是框架型伪静态;二是利用组件把asp的后辍显示为htm。那么把网...
  • heshi_yao
  • heshi_yao
  • 2016年03月06日 23:26
  • 3037

使用Url Rewrite进行URL重写(实现网站伪静态)

http://blog.163.com/zhangmihuo_2007/blog/static/27011075201351433716225/ 有些项目需要隐藏请求地址的后缀,比如...
  • luofeixiongsix
  • luofeixiongsix
  • 2015年11月04日 16:52
  • 1378

urlrewriter实现jsp页面的伪静态化

urlrewriter.jar包的官方下载地址:http://tuckey.org/urlrewrite/ 若是下载不了,可以通过http://download.csdn.net/detail/liu...
  • liunian02050328
  • liunian02050328
  • 2013年10月29日 15:27
  • 6037

asp.net一般处理程序实现验证码功能

新建一个一般处理文件。文件内容如下:public class VerifyCode : IHttpHandler, IRequiresSessionState { public ...
  • yiershan1314
  • yiershan1314
  • 2016年09月08日 22:41
  • 297

aspnet_isapi.dll设置图文介绍.net的程序实现伪静态

aspnet_isapi.dll设置图文介绍.net的程序实现伪静态 C#--ASP.NET2009-10-12 14:56:29阅读1081评论2  字号:大中小 订阅用URLRewriter控件①...
  • qingyun0719
  • qingyun0719
  • 2011年05月18日 16:37
  • 567

ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置

 ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置   核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态...
  • tereser
  • tereser
  • 2015年11月17日 15:11
  • 287

ASP.NET 如何实现伪静态 url重写路由功能

2010-12-04 13:54 ‍ ASP.NET 如何实现伪静态 其实所谓的伪静态页面,就是指的URL重写. 1.首先在web.config里写 view plaincopy ...
  • A_post
  • A_post
  • 2012年08月22日 16:19
  • 749
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net利用自定义Http处理程序实现URL伪静态之初探
举报原因:
原因补充:

(最多只允许输入30个字)