HttpHandler全站過濾替換Html輸出

2022-02-26 02:06:58 字數 4564 閱讀 8794

這幾天,一直想找乙個替換整站即將要輸出到客戶端html方法,但是找了好多,都沒有找到,找到最大級別的,也就是在頁面中處理;再者,這兩天又看到了dudu寫的關於 outputcache bug 的文章,真讓我感覺到,不理解原理看來真的不行的,沒文化太可怕了,所以,必須要再次認真的審視下 httphandler 和 httpmodule 的作用及用法 啦

先說 httphandler ,其實自定義 httphandler 也是蠻簡單的,但是這個的作用不是太大,自定義httphandler也主要用在靜態檔案的處理上面了,比如說 加水印、防盜煉等等,都是對 靜態檔案做的處理,因為 httphandler 和 asp.net 中的page 只能 2 選1 操作,所以,用來做處理動態頁面,是不太便利的。(asp.net 中的page,即 system.web.ui.page ,也是乙個 httphandler,只不過是經過擴充套件的、複雜的 httphandler)。

再說下 httpmodule 吧 ,感覺 httpmodule 能處理的事情比較多,也相對比較重要,另外使用比之前者也簡單很多,因為有 global.asax 檔案嘛,你懂得,不需要往 webconfig 配置啦。

httpmodule 中的事件比較多,在各個事件中,做一些處理還是很不錯的,對於一些較深入的應用,前提搞

httpmodule 是必須的

頁面直接上**吧,這寫**主要是完成以下兩個任務:

1. 全域性過濾 站點的 html  輸出

2. 頁面加上 outputcache後 , httpmodule 中的事件是否還執行

using system;

using system.web;

using system.io;

using system.text;

//////

mymodule 的摘要說明

///namespace moduledemo

private

module : authorizerequest!

" + datetime.now.millisecond.tostring() + "

");}

private

module : resolverequestcache!

" + datetime.now.millisecond.tostring() + "

");}

private

module : acquirerequeststate!

" + datetime.now.millisecond.tostring() + "

");}

private

module : prerequesthandlerexecute!

" + datetime.now.millisecond.tostring() + "

");}

private

module : postrequesthandlerexecute!

" + datetime.now.millisecond.tostring() + "

");}

private

module : releaserequeststate!

" + datetime.now.millisecond.tostring() + "

");}

private

module : updaterequestcache!

" + datetime.now.millisecond.tostring() + "

");}

private

module : endrequest!

" + datetime.now.millisecond.tostring() + "

");}

private

module : presendrequesthenaders!

" + datetime.now.millisecond.tostring() + "

");}

private

module : presendrequestconternt!

" + datetime.now.millisecond.tostring() + "

");}

public

void dispose()

}public

class replacehtml : stream

public

override

int read(byte buffer, int offset, int count)

//override the write method to filter response to a file.

public

override

void write(byte buffer, int offset, int count)

//the following members of stream must be overriden.

public

override

bool canread

}public

override

bool canseek

}public

override

bool canwrite

}public

override

long length

}public

override

long position

set

}public

override

long seek(long offset, system.io.seekorigin direction)

public

override

void setlength(long length)

public

override

void close()

public

override

void flush()

}}

default.aspx

<%

@ page

language

="c#"

%>

<%

@ outputcache

varybyparam

="*"

duration

="5"

%>

<

script

runat

="server">

protected

void

page_load(

object

sender,

eventargs

e) protected

override

void

render(

htmltextwriter

writer)

script

>

doctype

html

public

"-//w3c//dtd xhtml 1.0 transitional//en"

"">

<

html

xmlns

="">

<

head

id="head1"

runat

="server">

<

meta

name

="keywords"

content

="" />

<

meta

name

="description"

content

="" />

<

title

>

title

>

head

>

<

body

style

="font-family

:微軟雅?黑;

margin

:100px auto 100px 50px;"">

<

h1 style

="color

:gray;">

頁3面? html

h1>

<

h1 style

="color

:gray;">

測a試? replace

h1>

<

div><

asp:

label

runat

="server"

id="label1">

asp:

label

>

div>

body

>

html

>

web.config 配置:

MVC擴充套件HttpHandler

擴充套件用來做防盜煉 訪問特殊字尾名的處理方式 比如 這樣乙個位址 並不是直接訪問伺服器的物理路徑 會根據字尾名 找到當前字尾的處理程式 進行處理 所有字尾為.config的都由httpforbiddenhandler處理 字尾為這個的很安全 別人都是訪問不到的 通過這個 可以自己擴充套件一些特殊字...

阿里雲Linux建站過程

首先請允許我感謝b站up主 極客開發者 大家可以先學著,所需工具我已經傳到資源當中 我會把詳細的建站步驟與我個人網域名稱備案的整個流程 心得體會逐步完善到本篇部落格當中。總的來說建站的過程是 一 申請網域名稱 雲伺服器 二 網域名稱備案 三 網域名稱解析 四 使用tomcat與linux版的jdk配...

python全站爬蟲

通過正規表示式找到當前頁面中的所有url,儲存在set中 剔除重複 用類似圖資料結構的深度優先遍歷演算法遍歷set,實現全站爬蟲。from urllib import request from bs4 import beautifulsoup as bs import re import time ...