接連的事故讓我有點危機感,想要建立一個備援網站,若是我親愛的讀者們一時無法看到我的文章而心生焦慮、感到沮喪、萬念俱灰、了無生趣的話,在下可就罪孹深重了。(謎之聲: 很好嘛~ 你再繼續往自己臉上貼金沒關係,知道恥字怎麼寫嗎?)
於是,我想到的第二個方法---從ASPX端攔截,在ASP.NET產生好HTML要送出來之前,檢查全部的HTML內容,將所有出現的Blog.darkthread.net換成blog2.darkthread.net後再送出,但這要怎麼做呢?
protected override void Render(HtmlTextWriter writer)
{ //在備援網站上才要啟動
if (Request.Url.Host.ToLower() != "blog2.darkthread.net")
{ base.Render(writer);
return;
}
//自己做一個假的HtmlTextWriter去把HTML騙回來,草船借箭!!
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.StreamWriter sw = new System.IO.StreamWriter(ms);
HtmlTextWriter fakeHtmlTextWriter = new HtmlTextWriter(sw);
base.Render(fakeHtmlTextWriter);
sw.Flush();
string html = sw.Encoding.GetString(ms.ToArray());
//更動內容後,輸出到真正的HtmlTextWriter
writer.Write(html.Replace("b log.darkthread.net", "blog2.darkthread.net")); }
雖然在Render裡做手腳會造成一些效能損耗,但我暫時也找不到其他更好的方法(有人有點子的話請出個聲),而這個Hack式的技巧,還可以解決一些刁鑽的需求,有其犀利之處,大家可以參考看看。