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

2019-05-23 07:58:57刘景俊

第二步:该类的代码如下:

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:WINDOWSMicrosoft.NETFrameworkv2.0.50727 Temporary ASP.NET Filesschoolit3266aab1aca2fc74App_Code.2-69spm5.dll”和“c:WINDOWS Microsoft.NETFrameworkv2.0.50727Temporary ASP.NET Filesschoolit3266aab1aca2fc74assemblydl34d107fc60b753fe_ea19c801 MyActionlessform.DLL”中

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

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