ASP.NET中的URL過濾實現(xiàn)代碼
更新時間:2013年01月21日 16:12:06 作者:
最近做的一個Web項目需要對URL進(jìn)行過濾,在網(wǎng)上搜了一下,知道J2EE有個Filter的東西,而在.NET方面,其實也可以實現(xiàn)
下面是類的定義。
復(fù)制代碼 代碼如下:
using System;
using System.Web;
using System.Web.SessionState;
namespace QTJZ
{
public class Filters : IHttpModule, IRequiresSessionState
{
public void Dispose() { }
public void Init(HttpApplication application)
{
application.AcquireRequestState += new EventHandler(application_AcquireRequestState);
}
public void application_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
HttpRequest request = application.Request;
HttpResponse response = application.Response;
string url=request.CurrentExecutionFilePath.Trim('/');
string suffix = request.CurrentExecutionFilePathExtension.Trim('.');
if (!url.Equals("Default.htm") && (suffix == "aspx" || suffix == "htm"))
{
object sessionObj = application.Context.Session == null ? null : application.Session["useID"];
if (sessionObj==null)
{
response.Redirect("~/Default.htm");
}
}
}
}
}
為了實現(xiàn)過濾的效果,F(xiàn)ilters類需要實現(xiàn)IHttpMoeld接口,實現(xiàn)該接口需要有兩個方法,一個是Dispose,另一個是Init。Init的參數(shù)是一個HttpApplication類型的實例,利用這個實例注冊一些事件。由于現(xiàn)在要對URL進(jìn)行過濾,因此注冊的是AcquireRequestState事件。類似事件羅列如下
| BeginRequest | 在 ASP.NET 響應(yīng)請求時作為 HTTP 執(zhí)行管線鏈中的第一個事件發(fā)生。 |
| AuthenticateRequest | 當(dāng)安全模塊已建立用戶標(biāo)識時發(fā)生。 |
| AuthorizeRequest | 當(dāng)安全模塊已驗證用戶授權(quán)時發(fā)生。 |
| ResolveRequestCache |
在 ASP.NET 完成授權(quán)事件以使緩存模塊從緩存中為請求提供服務(wù)后發(fā)生, 從而繞過事件處理程序(例如某個頁或 XML Web services)的執(zhí)行。 |
| AcquireRequestState | 當(dāng) ASP.NET 獲取與當(dāng)前請求關(guān)聯(lián)的當(dāng)前狀態(tài)(如會話狀態(tài))時發(fā)生。 |
| PreRequestHandlerExecute | 恰好在 ASP.NET 開始執(zhí)行事件處理程序(例如,某頁或某個 XML Web services)前發(fā)生。 |
| PostRequestHandlerExecute | 在 ASP.NET 事件處理程序(例如,某頁或某個 XML Web service)執(zhí)行完畢時發(fā)生。 |
| ReleaseRequestState | 在 ASP.NET 執(zhí)行完所有請求事件處理程序后發(fā)生。 該事件將使?fàn)顟B(tài)模塊保存當(dāng)前狀態(tài)數(shù)據(jù)。 |
| UpdateRequestCache | 當(dāng) ASP.NET 執(zhí)行完事件處理程序以使緩存模塊存儲將用于從緩存為后續(xù)請求提供服務(wù)的響應(yīng)時發(fā)生。 |
| EndRequest | 在 ASP.NET 響應(yīng)請求時作為 HTTP 執(zhí)行管線鏈中的最后一個事件發(fā)生。 |
獲取要跳轉(zhuǎn)的url可以用request的CurrentExecutionFilePath屬性,而獲取請求文件的后綴可以用CurrentExecutionFilePathExtension,至于要按什么規(guī)則來判斷,按需求而定。我這里是在請求時判斷Session是否存在,不存在則跳轉(zhuǎn)回登陸頁面。由于要用到Session,打開頁面的時候會拋出異常,異常信息是“會話狀態(tài)在此上下文中不可用?!?,在實現(xiàn)了IRequiresSessionState接口之后就沒有異常拋出了。
此外,還需要在配置文件Web.config的 <system.web>節(jié)點(diǎn)下添加如下代碼
復(fù)制代碼 代碼如下:
<httpModules>
<add name="filters" type="QTJZ.Filters"/>
</httpModules>
其中type屬性則是上面Filters類的完全限定名
相關(guān)文章
利用ASP.NET MVC和Bootstrap快速搭建個人博客之后臺dataTable數(shù)據(jù)列表
jQuery dataTables 插件是一個優(yōu)秀的表格插件,應(yīng)用非常廣泛,本文給大家介紹利用ASP.NET MVC和Bootstrap快速搭建個人博客之后臺dataTable數(shù)據(jù)列表,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧2016-07-07
.Net使用SuperSocket框架實現(xiàn)WebSocket后端
這篇文章介紹了.Net使用SuperSocket框架實現(xiàn)WebSocket后端,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
關(guān)于DDD:管理"工作單元實例"的兩種模式的使用方法
本篇文章介紹了,關(guān)于DDD:管理"工作單元實例"的兩種模式的使用方法。需要的朋友參考下2013-04-04
IIS處理Asp.net請求和Asp.net頁面生命周期詳細(xì)說明
ASP.NET 頁運(yùn)行時,此頁將經(jīng)歷一個生命周期,在生命周期中將執(zhí)行一系列處理步驟。這些步驟包括初始化、實例化控件、還原和維護(hù)狀態(tài)、運(yùn)行事件處理程序代碼以及進(jìn)行呈現(xiàn)2012-01-01
MVC+EasyUI+三層新聞網(wǎng)站建立 后臺登錄界面的搭建(二)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第二篇,教大家如何搭建后臺登錄界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
asp.net richTextBox中高亮顯示選中字符串或文本
最近開發(fā)程序需要對一段文本中的某個字符串進(jìn)行高亮顯示,網(wǎng)上找了下資料2011-11-11

