ASP.NET中的URL過濾實(shí)現(xiàn)代碼
下面是類的定義。
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");
}
}
}
}
}
為了實(shí)現(xiàn)過濾的效果,F(xiàn)ilters類需要實(shí)現(xiàn)IHttpMoeld接口,實(shí)現(xiàn)該接口需要有兩個(gè)方法,一個(gè)是Dispose,另一個(gè)是Init。Init的參數(shù)是一個(gè)HttpApplication類型的實(shí)例,利用這個(gè)實(shí)例注冊一些事件。由于現(xiàn)在要對URL進(jìn)行過濾,因此注冊的是AcquireRequestState事件。類似事件羅列如下
BeginRequest | 在 ASP.NET 響應(yīng)請求時(shí)作為 HTTP 執(zhí)行管線鏈中的第一個(gè)事件發(fā)生。 |
AuthenticateRequest | 當(dāng)安全模塊已建立用戶標(biāo)識(shí)時(shí)發(fā)生。 |
AuthorizeRequest | 當(dāng)安全模塊已驗(yàn)證用戶授權(quán)時(shí)發(fā)生。 |
ResolveRequestCache |
在 ASP.NET 完成授權(quán)事件以使緩存模塊從緩存中為請求提供服務(wù)后發(fā)生, 從而繞過事件處理程序(例如某個(gè)頁或 XML Web services)的執(zhí)行。 |
AcquireRequestState | 當(dāng) ASP.NET 獲取與當(dāng)前請求關(guān)聯(lián)的當(dāng)前狀態(tài)(如會(huì)話狀態(tài))時(shí)發(fā)生。 |
PreRequestHandlerExecute | 恰好在 ASP.NET 開始執(zhí)行事件處理程序(例如,某頁或某個(gè) XML Web services)前發(fā)生。 |
PostRequestHandlerExecute | 在 ASP.NET 事件處理程序(例如,某頁或某個(gè) XML Web service)執(zhí)行完畢時(shí)發(fā)生。 |
ReleaseRequestState | 在 ASP.NET 執(zhí)行完所有請求事件處理程序后發(fā)生。 該事件將使?fàn)顟B(tài)模塊保存當(dāng)前狀態(tài)數(shù)據(jù)。 |
UpdateRequestCache | 當(dāng) ASP.NET 執(zhí)行完事件處理程序以使緩存模塊存儲(chǔ)將用于從緩存為后續(xù)請求提供服務(wù)的響應(yīng)時(shí)發(fā)生。 |
EndRequest | 在 ASP.NET 響應(yīng)請求時(shí)作為 HTTP 執(zhí)行管線鏈中的最后一個(gè)事件發(fā)生。 |
獲取要跳轉(zhuǎn)的url可以用request的CurrentExecutionFilePath屬性,而獲取請求文件的后綴可以用CurrentExecutionFilePathExtension,至于要按什么規(guī)則來判斷,按需求而定。我這里是在請求時(shí)判斷Session是否存在,不存在則跳轉(zhuǎn)回登陸頁面。由于要用到Session,打開頁面的時(shí)候會(huì)拋出異常,異常信息是“會(huì)話狀態(tài)在此上下文中不可用。”,在實(shí)現(xiàn)了IRequiresSessionState接口之后就沒有異常拋出了。
此外,還需要在配置文件Web.config的 <system.web>節(jié)點(diǎn)下添加如下代碼
<httpModules>
<add name="filters" type="QTJZ.Filters"/>
</httpModules>
其中type屬性則是上面Filters類的完全限定名
相關(guān)文章
Asp.NET Core 限流控制(AspNetCoreRateLimit)的實(shí)現(xiàn)
這篇文章主要介紹了Asp.NET Core 限流控制(AspNetCoreRateLimit)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03.Net Web Api中利用FluentValidate進(jìn)行參數(shù)驗(yàn)證的方法
最近在做Web API,用到了流式驗(yàn)證,就簡單的說說這個(gè)流式驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于.Net Web Api中利用FluentValidate進(jìn)行參數(shù)驗(yàn)證的相關(guān)資料,,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07asp.net實(shí)現(xiàn)服務(wù)器文件下載到本地的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)服務(wù)器文件下載到本地的方法,需要的朋友可以參考下2017-02-02asp.net 截取Http請求的實(shí)現(xiàn)代碼
本篇文章比較短,主要是因?yàn)槲业囊粋€(gè)隨想產(chǎn)生的一段代碼。 這段代碼的功能你可以叫做是簡單的Http服務(wù)器也可以叫做Http請求截取。它實(shí)現(xiàn)的功能就是截取Http請求然后自己做處理。2010-06-06ASP.NET Core實(shí)現(xiàn)多文件上傳
這篇文章介紹了ASP.NET Core實(shí)現(xiàn)多文件上傳的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01.net core 靜態(tài)類獲取appsettings的方法
這篇文章主要介紹了.net core 靜態(tài)類獲取appsettings的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06