在管理ASP.NET网站的时候,有时会对网站整体做出控制,这时把这些代码写在global.asax内可以做到全局控制。

未添加任何代码的global.asax文件如下:

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码

}

void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不引发该事件。

}

</script>

假设,我们要做网站安全处理,禁止客户端访问网站的某些目录,比如日志目录,上传文件目录等。

在global文件里,重写一下Inti() 方法,然后在Init()方法里注册一个处理禁止访问目录的事件,代码如下

public override void Init()
{
base.BeginRequest += BeginRequestEventHandler;
}
/// <summary>
/// 访问检测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void BeginRequestEventHandler(object sender, EventArgs e)
{

//新写一个处理类,不要把global文件弄得很乱
GlobalCheck globalCheck = new GlobalCheck();
globalCheck.RequestLogCheck(sender);
}

////////////////////////////////////////////////////////////////////处理类代码如下

public class GlobalCheck
{
/// <summary>
/// 检测是否访问了日志目录
/// </summary>
/// <param name="sender"></param>
public void RequestLogCheck(object sender)
{
HttpApplication app = sender as HttpApplication;
var requset = app.Context.Request;
string[] reqURL = requset.Url.AbsolutePath.Split('/');

List<string> forbidden = ForbiddenDir();
foreach (string item in reqURL)
{
if (forbidden.Contains(item))
{
app.Response.StatusCode = 404;//HTTP状态码标记为404
app.Response.End();
break;
}
}
}

/// <summary>
/// 文件上传检测
/// </summary>
public void RequestFileCheck(object sender)
{
HttpApplication application = sender as HttpApplication;

string AllowFileExten = "jpg|jpeg|ico|icon|png|gif|bmp|rar|zip|7z|doc|docx|xls|xlsx";
List<string> AllowFileList = new List<string>();
foreach (string item in AllowFileExten.Split('|'))
{
AllowFileList.Add(item);
}

HttpFileCollection HFC = application.Request.Files;
if (HFC.Count > 0)
{
for (int i = 0; i < HFC.Count; i++)
{
HttpPostedFile tempFile = HFC[i];

string fileName = tempFile.FileName;
string MIME = tempFile.ContentType;

string fileExt = System.IO.Path.GetExtension(fileName).ToLower().TrimStart('.');
if (!AllowFileList.Contains(fileExt))
{
application.Response.Status = "403 Forbidden";
application.Response.StatusCode = 403;
application.Response.End();
}
}
}
}

/// <summary>
/// 禁止访问目录列表
/// </summary>
/// <returns></returns>
private List<string> ForbiddenDir()
{
List<string> list = new List<string>();
list.Add("Log");

return list;

}

}

asp.net网站全局控制文件内注册事件的更多相关文章

  1. ASP.NET 网站在域环境内配置授权访问

    在 IIS 中,通常需要配置域中的某些用户或者用户组有权限访问部署的 WEB 站点或者 WEB 服务.我们知道要实现这种功能可以有如下几种方式: 代码,获取当前用户,到域服务器上去验证当前用户是否为合 ...

  2. asp.net网站中增删文件夹会导致Session或cache等等丢失

    因为这会导致网站资源本身重新加载. 如果要改变文件和文件夹,一般应该是对 app_data 下进行操作.

  3. 关于ASP.NET 中 Global.asax 文件的后台事件处理程序

    Global.asax.cs中的事件处理程序,像 Application_Start.Application_Error 等,这些名称和事件都是怎么来的呢? MSDN上的这篇文章描述了相关的内容: h ...

  4. 实现对ASP.NETMvc及Asp.NetCore的权限控制

    AccessControlHelper Build Status Intro 由于项目需要,需要在 基于 Asp.net mvc 的 Web 项目框架中做权限的控制,于是才有了这个权限控制组件. 项目 ...

  5. Day10文件内指针移动和函数

    强调:只有t模式下的read(n),n代表字符个数,除此以外都是以字节为单位 ,例如f.read(4)读出4个字符 控制文件内指针的移动:f.seek()以字节为单位 f.tell()文件开头为准,当 ...

  6. 【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待

     [等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可 ...

  7. Oracle 无备份情况下的恢复--控制文件/数据文件

    13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...

  8. JS——行内式注册事件

    html中行内调用function的时候,是通过window调用的function,所以打印this等于打印window,所以在使用行内注册事件时务必传入参数this <!DOCTYPE htm ...

  9. ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等

    App_Browsers  包含 ASP.NET 用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件.有关更多信息,请参见浏览器定义文件架构(browsers 元素)和如何:在 A ...

随机推荐

  1. 重新学习之spring第三个程序,整合struts2+spring

    第一步:导入Struts2jar包+springIOC的jar包和Aop的Jar包 第二步:建立applicationContext.xml文件+struts.xml文件+web.xml文件 web. ...

  2. 使用UltraISO制作U盘启动

    下面给你提供是的一个万能的制作系统U盘的方法,用这个U盘你可以加载任何你想要的系统,即使是Linux系统都是可以,你需要做的就是下载安装软件,下载一个系统安装光盘的镜像文件,然后用软件导入到U盘就可以 ...

  3. Sql Server中的事务隔离级别

    数据库中的事物有ACID(原子性,一致性,隔离性,持久性)四个特性.其中隔离性是用来处理并发执行的事务之间的数据访问控制.SqlServer中提供了几种不同级别的隔离类型. 概念 Read UnCom ...

  4. 插入排序算法-python实现

    #-*- coding: UTF-8 -*- import numpy as np def InsertSort(a): for i in xrange(1,a.size): for j in xra ...

  5. Android Studio failed to create error code -6解决方法

    起因是AndroidStudio编译太慢,在stackoverflow上找解决方法,创建了个vm选项文件,导致内存不够用 很多中文博客上都千篇一律地说是内存不够,打开安装路径下bin目录下的studi ...

  6. 黄聪:WordPress 多站点建站教程(三):主站如何调用子站的文章内容、SQL语句如何写?

    1.如果懂得编程的朋友可以SQL语句,然后加上PHP函数等操作就可以通过直接调用网站的数据库信息来实现想要达到的目的. 既然要用到SQL语句首先得对WordPress多站点数据库有一个了解,多站点激活 ...

  7. 汇编_指令_FLAGS

    标志名                                       标志 1           标志 0 OF   (溢出标志)                     OV     ...

  8. http协议再复习(二)

    HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...

  9. python学习-day 2

    1.执行Python脚本的两种方式1)调用解释器 Python +绝对路径+文件名称2)调用解释器 Python +相对路径+文件名称 2.简述位.字节的关系8位为1个字节 3.简述ASCII.uni ...

  10. 彻底禁止win10更新

    关闭win10自动更新: 可以用下面方法关闭: 1.首先在服务界面关闭Windows Update服务并设置为禁用并在恢复界面全部如下图设置为无操作. 2.只关闭了Windows Update服务发现 ...