当前位置:  编程技术>.net/c#/asp.net

ASP.NET伪静态(IHttpModule方式)的实现代码

    来源: 互联网  发布时间:2014-08-30

    本文导语:  实现伪静态时,需要在请求发生之时对请求的地址进行处理,则要用到IHttpModule接口。 伪静态,多是将一个Get访问的查询字符串变成一个独立的文件。 但是在程序中实际上访问的还是查询字符串中的值。如: Http://www./news.as...

实现伪静态时,需要在请求发生之时对请求的地址进行处理,则要用到IHttpModule接口。

伪静态,多是将一个Get访问的查询字符串变成一个独立的文件。

但是在程序中实际上访问的还是查询字符串中的值。如:
Http://www./news.aspx?id=1
改变为:
Http://www./news_1.aspx
好处:
有利于SEO及防止SQL注入等。
当然,文件的扩展名在服务器支持的情况下也是可以变化的。

我们需要实现IHttpModule接口中的两个方法:
Dispose() 处置由实现 IHttpModule 的模块使用的资源(内存除外)。
Init() 初始化模块,并使其为处理请求做好准备。

第一步:如果要在应用程序中使用IHttpModule ,则需要配制web.config文件。
在Web.config文件中,我们需要对httpModules元素进行投置,该节点在system.web元素中。如下:
 

代码示例:

      

注意:其中type,必须为实现了IHttpModule接口的类型的俱体路径(包括命名空间)。

第二步:实现IHttpModule
新建一个HttpModule类,与配制文件中的类型命名空间路径相同。

使用该类实现IHttpModule接口。

开始的代码将写在Init方法中,该方法中的HttpApplication对象context包括程用程序对象的所有方法,属性和事件。
在这个对象中,我们可以开始一个请求事件的处理。

在Init方法中:
 

context.BeginRequest += new EventHandler(context_BeginRequest);


以上代码,为请求开始事件注册了一个委托方法。

在注册委托方法时,可以在写完+=后,连续按两次Tab键,会自动生成context_BeginRequest方法。

第三步:关于context_BeginRequest()方法
在context_BeginRequest方法中,我们可根据请求的不同,进行请求的重新定向。这样就可以将虚拟的伪静态路径变成我们程序所需要的Get方式查询字符串。

要想改变请求,就必须得到当前求请,在ASP.NET中,使用HttpContext类型来封装所有请求对象。
可以通过刚刚的HttpApplication对象来获取HttpContext对象。如:
 

HttpApplication application = sender as HttpApplication;
HttpContext context = application.Context;

第四步:得到请求与重定向
1、得到请求:
可以使用HttpContext对象的属性Request来获取当前请求。
在得到当前请求后,可以使用正则表达式,从请求中获取所需的可变信息,用来重新定向到新的位置。
 
2、重定向:
可以使用HttpContext对象的方法RewritePath,可以将得到的新路径放到方法参数中。
  

代码示例:
  using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Text.RegularExpressions;
    
    ///
    ///HttpModel 的摘要说明
    ///
    public class HttpModule:IHttpModule
    {
            public void  Dispose()
            {
                throw new NotImplementedException();
            }
    
            public void  Init(HttpApplication context)
            {
                context.BeginRequest += new EventHandler(context_BeginRequest);//为BeginRequest事件注册方法
            }
    
            void context_BeginRequest(object sender, EventArgs e)
            {
                HttpApplication application = (HttpApplication)sender;//得到当前应用程序对象
                HttpContext context = application.Context; //得到当前请求的上下文
    
                string url =context.Request.Url.ToString(); //得到当前请求的假URL
                int lastindex = url.LastIndexOf('/'); //从最后一个/取索引
                string filename = url.Substring(lastindex);//得到文件名
                Regex reg = new Regex(@"(d+).aspx"); //创建正则对象,用来验证文件名是否满足条件
                if (reg.IsMatch(filename))
                {
                    Match match = reg.Match(filename);//创建Match对象
                    string id = match.Groups[1].Value;//通过正则结果对象,取到组()中数字的值(ID)
    
                    context.RewritePath("View.aspx?id=" + id);//通过指定的ID,重写真正存在的URL地址。
                }
    
            }
    }

  介绍完了,在asp.net中通过IHttpModule接口实现伪静态,有兴趣的朋友,亲自动手测试下吧,看看效果如何?!


    
 
 

您可能感兴趣的文章:

  • asp.net伪静态后真正的静态文件无法访问的解决方法
  • asp.net网站伪静态怎么使用中文url地址?
  • ASP.NET网站伪静态下使用中文URL的方法
  • asp.net静态方法弹出对话框的一例代码
  • asp.net 生成静态页时如何过滤掉viewstate
  • asp.net 伪静态简单实例
  • ASP.NET 伪静态页面的实现方法
  • asp.net伪静态(URL重写)代码一例
  • asp.net 伪静态 URL重写的纯代码实现方法
  • IIS7中ASP.NET伪静态配置方法介绍
  • 去掉 asp.net 静态后生成的viewstate代码的方法
  • asp.net URL地址重写(伪静态)学习实例
  • asp.net URLRewriter实现URL重写(伪静态)的方法介绍
  • asp.net不用设置iis实现url重写 类似伪静态路由
  • 使用ASP.NET模板生成HTML静态页的方法
  • asp.net生成静态页面并分页的实现方法
  • asp.net web.config伪静态规则配置示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c#/ASP.NET操作cookie(读写)代码示例
  • ??谁能把ASP代码改为JSP的
  • asp.net文字水印功能简单代码
  • asp连接sql server 2005的代码
  • asp.net读取本地与全局资料文件的代码
  • asp.net 获取目录中图片的代码
  • asp.net正则表达式提取中文的代码示例
  • 如何在ASP的frame框架中屏蔽右键,以防止查看页面的源代码?
  • asp 正则 过滤重复字符串的代码
  • asp正则过滤重复字符串的代码
  • asp去掉html,保留img br p div的正则实现代码
  • asp.net使用mshtml处理html的代码
  • asp.net 判断当前日期是该年中第几周的代码
  • asp.net中利用正则表达式判断一个字符串是否为数字的代码
  • asp.net弹出消息框、确认框的代码汇总
  • asp.net 获取ashx中数据的代码
  • asp.net防止页面刷新重复提交的代码
  • asp.net读取txt文件内容的代码
  • asp.net文件分块下载的实现代码
  • asp.net 正则表达式匹配图片路径的实现代码
  • 编程技术其它 iis7站长之家
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • asp.net UrlEncode对应asp urlencode的处理方法
  • asp.net实例 定义和使用asp:AccessDataSource
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • Linux平台下哪种方法实现ASP好?
  • ASP和ASP.Net共享Session解决办法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3