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;

    }


    }

  • 相关阅读:
    hdu 1022 Train Problem I 模拟
    Eclipse plugin开发 —实现语法高亮
    一篇英文版的eclipse插件textEditor资料
    (转)Eclipse常用快捷键
    Eclipse plugin开发 —实现单行与多行注释
    Eclipse plugin开发 —实现文本内容帮助
    CSS borderstyle
    ClassLoader getResource
    javascript add table content from xml
    postgres 当前时间
  • 原文地址:https://www.cnblogs.com/huyueping/p/9553424.html
Copyright © 2011-2022 走看看