。
IHttpModule的
在web开发中,当你遇到要求来,需要做一些前处理和后处理在网页请求;这种方法也有,但是从实施的角度,为什么不这样做,在这样一种方式,有人可以禁用/启用服务,而无需做更改代码吗?想从一个配置文件。
是的,我知道的Windows IIS支持ISAPI筛选器和ISAPI扩展,但它们只能使用C / C开发,加上Net框架没有其他功能支持(IIS6中)。过滤器注册在站点级别或全球一级(适用于IIS服务器上的所有网站)。我的工作,该产品被广泛使用银行的ISAPI过滤器的使用和他们围绕从未少说也有其他框架(框架拦截过滤器模式)提供,这也支持这一功能。
理想情况下,AOD希望有能力在部署时添加或删除模块无需更改代码,正如我之前提到的,这是通常被称为??em>的部署可组合??
你甚至可以添加动态实例在部署时的过滤器一个配置文件,并创建一个组合的过滤器链。对于这一点,Net框架允许添加的HttpModules,哪一种行为像在global.asax通常会在这个意义上,其方法可以在应用程序上下文中使用,除需要在web.config中注册之前使用模块。
这里的想法是,过滤器可以操纵的背景下,例如加入,信息或重定向请求。这种设计的好处是,过滤器是自包含的组件,没有任何直接依赖于对其他过滤器或控制器事件驱动的过滤器
拦截过滤器的目的,另一方面,是拦截和修改的情况下,它被称为。对象可以quot; subscribequot的,没有原来的对象依赖于事件观察员。例如,一个认证过滤器可能会重定向到一个错误页面的请求或如果验证失败的登录页。
实现IHttpModule接口的过滤器,可以连接到一系列框架定义的事件。例如,一些过滤器,可以预期一定的处理已发生之前,他们被调用。过滤器没有明确的机制与另一个共享状态信息除了操纵的情况下。实施细则
NET中编写自定义HTTP模块的一般过程是:实现IHttpModule接口。处理Init方法和登记你需要的事件。处理事件。或者,实现Dispose方法,如果你有做清理。
注册在web.config文件中的模块。
我,Äôve放在一起示例项目,该项目实现了以下情形:让,的AOS假设你为一家银行工作,你已分配任务,以创建一个服务(HttpModule的),基本上确定用户的IP地址每次登录到现场然后比较它与过去10
对应的近10倍(显然)用户登录的IP地址。随着识别恶意用户从其他地理图形位置的黑客攻击的目的。如果是这样的话,那么你必须将用户重定向到另一个页面会提示用户一系列问题,并为每一个问题,用户必须提供一个有效的答案,使他们可以继续,否则拒绝访问。
我,Äôll启动创建名为HttpModuleSampleSite项目的解决方案,例如:
{S0的}
添加对项目的App_Code文件夹中添加ASP.NET文件夹选项。在该文件夹中添加一个新类,并将其命名为类似
IPAuthenticationServiceModule.cs
{S}
一旦你添加类继续前进,使其继承IHttpModule和实施其各自的方法。
{S2的}
现在,我们可以进入这之前,我们执行的处理程序,让我指出此外,你应该小心的httpModules工作不落入循环时,你真的需要知道你订阅的管道时,有机会赢得了一些功能,AOT可;例如会议国家赢得了AOT是名为AuthorizedRequest事件提供。
在这里,AOS部分模块的实施:public void Init(HttpApplication context)
{
_httpApp = context;
context.PostAcquireRequestState += new EventHandler(context_PostAcquireRequestState);
}
void context_PostAcquireRequestState(object sender, EventArgs e)
{
// this is how it should be => IPAddress.Parse(this._httpApp.Context.Request.UserHostAddress);
// but for demo purpose we pretend the request is coming off somewhere else
if (_httpApp.Context.User.Identity.IsAuthenticated)
{
// Once the user has submitted all answers correctly this field
// should be available trhought session state life.
// We must check here because remember we're within a pipeline of subscribed events
if (_httpApp.Context.Session["doubts"] !=
null && _httpApp.Context.Session["doubts"].ToString().Equals(
"no doubts user validated"))
{
return;
}
// This portion of code will run only when the user has not submitted the answers correctly.
// (Evil user).
IPAddress ipaddress = IPAddress.Parse("209.191.122.70");
bool match = _previusAddresses.Count
(
a => a.Equals(ipaddress)) == 10;
//Be careful falling into loops
if (!match && !_httpApp.Context.Request.FilePath.Contains(
"LogonQuestions.aspx"))
{
_httpApp.Context.Response.Redirect(
string.Format(" /LogonQuestions.aspx")
);
}
}
}
你应该找到的项目文件的zip在本页面底部。确保web.config文件注册的处理程序如下:
{S3的}
运行该项目的网站加载时,继续前进,点击注册用户,并创建假冒用户。
{S4}的
在网站上后,然后单击右上角点击主页按钮登录,使用你的假用户。您登录后,应采取的假IP地址的地方,你应该得到的提示验证用户的问题。