今天看到小舖有人問了一個問題
是關於輸出的html的source有些問題,需要調整
然後發現國外有一位開發者使用
IHttpModule來處理。
今天看到小舖有人問了一個問題
是關於輸出的html的source有些問題,需要調整
然後發現國外有一位開發者使用
IHttpModule來處理。
基本上小弟覺得這種問題應該是一次解決才對
而不是放在IHttpModule來處裡
放在IHttpModule中要處裡的話小弟會頃向是因為需要判斷 request當作變數
來依照不同的狀況做不同的回應
既然規則是一樣的那就一次解決就好
該作者的用法是
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
#endregion
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app.Request.RawUrl.Contains(".aspx"))
{
app.Response.Filter = new WhitespaceFilter(app.Response.Filter);
}
}
自己寫一個Response.Filter
並在Write做處理
然後我很好奇的試了
public override void Write(byte[] buffer, int offset, int count)
{
byte[] data = new byte[count];
Buffer.BlockCopy(buffer, offset, data, 0, count);
string html = System.Text.Encoding.Default.GetString(buffer);
html = reg.Replace(html, string.Empty);
using (StreamWriter sw = new StreamWriter(@"D:\request\" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".txt", true))
{
sw.WriteLine("Text");
}
byte[] outdata = System.Text.Encoding.Default.GetBytes(html);
_sink.Write(outdata, 0, outdata.GetLength(0));
}
結果下場就是每頁面重整一次,就會產生一個新的檔案(代表Write中的code是每次的request都會被呼叫)
我想一兩次也就算了,像這種針對所有的.aspx都做這樣的加工那可不得了
另外如果您在aspx中有設定OutputCache的話倒是不用每次都跑Write
<%@ OutputCache Duration="10" VaryByParam="None" %>
不過該作者的留言中幾乎沒有人對他的程式有疑問
該不會其實那已經是最好的做法了吧…
只是我覺得像那種排版的問題
程式開發人員在開發時就可以參考這個
如果是單純的html(由設計人員寫的html)
要上版前跑一次移掉多餘空白也就好了的說。