本文实例总结了ASP.NET实现伪静态网页方法,分享给大家供大家参考之用。具体方法如下:

方法一:利用Httphandler实现URL重写(伪URL及伪静态)

我们有时候会见到这样的地址:“http://www.XXXX.com/show-12-34.html”,你或许认为在站点服务器根目录“/”下存在名为“show-12-34.html”的文件,其实实际它可能是不存在的,而可能你看到的内容是“/aspx/show.aspx"htmlcode">

//类URLRewriter程序清单: 
using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
/// <summary> 
/// UrlRewriter URL重写类 
 /// Author:yoyo 
/// </summary> 
public class UrlRewriter : IHttpHandler //实现“IHttpHandler”接口 
{ 
 public UrlRewriter() 
{ 
// 
// TODO: 在此处添加构造函数逻辑 
 // 
} 
public void ProcessRequest(HttpContext Context) 
{ 
try 
{ 
//取得原始URL屏蔽掉参数 
string Url = Context.Request.RawUrl; 
//建立正则表达式 
  System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex 
  (@"/show-(\d+)-(\d+)\..+",System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
//用正则表达式进行匹配 
System.Text.RegularExpressions.Match m = Reg.Match(Url,Url.LastIndexOf("/"));//从最后一个“/”开始匹配 
if (m.Success)//匹配成功 
{ 
String RealPath = @"~/aspx/show.aspx" + m.Groups[1] + "&id=" + m.Groups[2]; 
//Context.Response.Write(RealPath); 
//Context.RewritePath(RealPath);//(RewritePath 用在无 Cookie 会话状态中。) 
Context.Server.Execute(RealPath); 
} 
else  
{ 
Context.Response.Redirect(Context.Request.Url.ToString()); 
} 
} 
catch 
{ 
Context.Response.Redirect(Context.Request.Url.ToString()); 
} 
} 
/// <summary> 
/// 实现“IHttpHandler”接口所必须的成员 
/// </summary> 
/// <value></value> 
/// Author:yoyo 
public bool IsReusable 
{ 
get { return false; } 
}
}

2.在web.config文件还要添加以下设置项

在<system.web>节点下添加如下代码:

<httpHandlers> 
<add verb="*" path="*/show-" type="UrlRewriter" /> 
</httpHandlers>

解释一下:

verb是指允许的动作“GET”、“POST”、“PUT”中的一种或几种,星号“*”表示全部允许;

path是指匹配路径,支持简单的通配符;

type是指绑定的类名以及包括命名空间(如果有的话);

对了,首先你要建立一个WEB窗体“show.aspx”在目录“aspx”下,因为这个文件就是实际接受请求并显示相关内容的页面。

OK!,编译,打开网站输入地址http://localhost:80/show-12-34.aspx 访问一下,检查看是不是显示的“/aspx/show.aspx"*" path="*/show-" type="UrlRewriter" /> 
</httpHandlers>

现在打开网站输入地址http://localhost:80/show-12-34.html 访问一下~!

方法二:地址重写、使用伪静态、页面回发处理

制作网站页面的时候,有时候为了用户的体验和搜索引擎的收录,很多网站经常使用伪静态地址重写,或者称为 URL地址重写的办法,来将诸如:MyEbook.aspx"htmlcode">

using System; 
using System.IO; 
using System.Web; 
using System.Web.UI; 
namespace MyURL 
{ 
  public class MyOLPage : Page 
  { 
    public MyOLPage() 
    { } 
    protected override void Render(HtmlTextWriter writer) 
    { 
      if (writer is System.Web.UI.Html32TextWriter) 
      { 
        writer = new FormFixerHtml32TextWriter(writer.InnerWriter); 
      } 
      else 
      { 
        writer = new FormFixerHtmlTextWriter(writer.InnerWriter); 
      } 
      base.Render(writer); 
    } 
  } 
 
  internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter 
  { 
    private string _url; // 伪装的URL 
    internal FormFixerHtml32TextWriter(TextWriter writer) 
      : base(writer) 
    { 
      _url = HttpContext.Current.Request.RawUrl; 
    } 
    public override void WriteAttribute(string name, string value, bool encode) 
    { 
      if (_url != null && string.Compare(name, "action", true) == 0) 
      { 
        value = _url; 
      } 
      base.WriteAttribute(name, value, encode); 
    } 
  } 
  internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter 
  { 
    private string _url; 
    internal FormFixerHtmlTextWriter(TextWriter writer) 
      : base(writer) 
    { 
      _url = HttpContext.Current.Request.RawUrl; 
    } 
    public override void WriteAttribute(string name, string value, bool encode) 
    { 
      if (_url != null && string.Compare(name, "action", true) == 0) 
      { 
        value = _url; 
      } 
      base.WriteAttribute(name, value, encode); 
    } 
  } 
} 

之后,将这个类文件编译成为MyActionlessform.dll文件,并在网站的项目中引用他,

第三步:打开具有回发操作的页面,将其中的:System.Web.UI.Page更改为: MyURL.MyOLPage,如此而已,一劳永逸了,以后不再担心回发暴露真实地址吓走网友拉!

至此,大功可成一半多一点,接下来问题又来了,什么问题呢,你运行一下你的网站,是不是出现如下错误呀!

CS0433: 类型“MyURL.MyOLPage”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ Temporary ASP.NET Files\schoolit\3266aab1\aca2fc74\App_Code.2-69spm5.dll”和“c:\WINDOWS\ Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\schoolit\3266aab1\aca2fc74\assembly\dl3\4d107fc6\00b753fe_ea19c801\ MyActionlessform.DLL”中

大体就是这样的错误了,针对这样的错误,有很多解决办法,有的地方说,删除临时使用的文件夹,删除某个命名 空间等等操作,俺都试过了,但是百试不得其果,后来俺就自己想想,出现这样的错误无非就是两个文件同时存在,但是又不能重复使用,解决办法那还不简单,停 用一个,只使用一个就行了嘛

上面的,我们不是建立了一个MyActionlessform.cs了吗,它存在App_Code这个文件夹里面,另外一个是 MyActionlessform.dll,两个文件内容完全一样,做好了,我们就不需要MyActionlessform.cs了,我们只需要 MyActionlessform.dll,那么,想方设法将前者弄走不就得了(本人建议将此文件排除项目,不提倡直接删除该文件,因为以后可能使用 到),本人做法是,在项目中直接排出MyActionlessform.cs文件,经过测试,大功至此已结束!!!!

方法三:利用Mircosoft URLRewriter.dll实现页面伪静态

昨天,转贴了一篇利用ISAPI筛选器来实现URL伪静态的文章,我按照文章上的内容做,可是没有做出来,目前看来,该方法没有使用Microsoft URLRewriter.dll这个方法好,至少我个人觉得,花了一个晚上的时间,终于研究出来了怎么利用这个dll文件来对asp.net页面实现静态 化了,其实很简单。
一、获得Mircosoft URLRewriter.dll
获得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx"htmlcode">

<"1.0""RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
 </configSections> 
 
 <RewriterConfig> 
    <Rules> 
      <RewriterRule> 
        <LookFor>~/web/new/type/(.[0-9]*)\.html</LookFor> 
    <SendTo>~/web/new.aspx"*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
   <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
  </httpHandlers> 
    <compilation debug="true"/></system.web> 
</configuration> 

这里简单介绍一下:

<RewriterConfig> 
  <Rules> 
  <RewriterRule> 
   <LookFor>要查找的模式</LookFor> 
   <SendTo>要用来替换模式的字符串</SendTo> 
  </RewriterRule> 
  <RewriterRule> 
   <LookFor>要查找的模式</LookFor> 
   <SendTo>要用来替换模式的字符串</SendTo> 
  </RewriterRule> 
  </Rules> 
</RewriterConfig> 

httpHandlers的设置主要是配合IIS将请求重新定义处理,这里也比较关键,如果不存在合理的httpHandlers,那么,访问肯定会失败的。

关于正则表达式,可以到百度里搜索:"常用正则表达式",会有很多。

五.配置IIS解析.html文件

右键点我的电脑-->管理-->展开'服务和应用程序'-->internet信息服务-->找到你共享的目录-->右键 点击属性 -->点击'配置'-->映射下面 -->找到.aspx的可执行文件路径 复制路径-->粘贴路径-->扩展名为".html"-->然后把检查文件是否存在的勾去掉这样就可以了,如果遇到“确定”按钮失效, 可以用键盘事件编辑路径即可解决。

本文实例代码点此本站下载。

相信本文所述对大家的asp.net程序设计有一定的借鉴价值。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!