zoukankan      html  css  js  c++  java
  • asp.net网站全局控制文件内注册事件

    在管理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;

    }


    }

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 交换Easy
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    QT中给各控件增加背景图片(可缩放可旋转)的几种方法
    回调函数实现类似QT中信号机制
    std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
  • 原文地址:https://www.cnblogs.com/huyueping/p/9553424.html
Copyright © 2011-2022 走看看