.Net Global.asax、httpModules伪静态功能实现

简介: //第一种方法,Global文件重写   protected void Application_Start(object sender, EventArgs e)         {             File.

//第一种方法,Global文件重写

  protected void Application_Start(object sender, EventArgs e)
        {
            File.AppendAllText(Server.MapPath("global.txt"),DateTime.Now.ToString()+" AppStart\r\n");
        }

        protected void Session_Start(object sender, EventArgs e)
        {
            File.AppendAllText(Server.MapPath("global.txt"), DateTime.Now.ToString()+" ip:"+Request.UserHostAddress+ " SessionStart \r\n");
        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            //每次打开网页都会发生
            //File.AppendAllText(Server.MapPath("global.txt"), DateTime.Now.ToString() + " ip:" + Request.UserHostAddress + "request\r\n");
            ////可以用来屏蔽指定ip
            //if (HttpContext.Current.Request.UserHostAddress == "127.0.0.1")
            //{
            //    HttpContext.Current.Response.Write("已被屏蔽");
            //    HttpContext.Current.Response.End();
            //}
            //防止图片盗链
            if (HttpContext.Current.Request.Url.AbsolutePath.EndsWith(".jpg") && HttpContext.Current.Request.UrlReferrer.Host != "localhost")
            {
                //Context.Response.Write(HttpContext.Current.Request.UrlReferrer.Host);
                HttpContext.Current.Response.WriteFile( HttpContext.Current.Server.MapPath("~/dl.jpg"));
                HttpContext.Current.Response.End();
            }
            //符合格式时,内部重写,地址栏不显示此地址
            Regex reg = new Regex(@".+MyStatic-(\d+).aspx");
            var match = reg.Match(HttpContext.Current.Request.Url.AbsolutePath);
            if(match.Success)
            {
                string page=match.Groups[1].Value;
                //仿静态页面
                HttpContext.Current.RewritePath("~/MyStatic.aspx?page="+page);
            }
           
        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {
            //获取未处理的异常信息
            Exception t = HttpContext.Current.Server.GetLastError();
            File.AppendAllText(Server.MapPath("global.txt"), DateTime.Now.ToString() +t.Message+"服务器错误\r\n");
        }

        protected void Session_End(object sender, EventArgs e)
        {
            File.AppendAllText(Server.MapPath("global.txt"), DateTime.Now.ToString() + " ip:" + Request.UserHostAddress + " SessionEnd \r\n");
        }

        protected void Application_End(object sender, EventArgs e)
        {
            File.AppendAllText(Server.MapPath("global.txt"), DateTime.Now.ToString() + " AppEnd\r\n");
        }

 //第二种方法,建立类库(处理程序)重写url-处理任何请求

//类库handle里的类Myhandle

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
namespace handle
{
    /// <summary>
    /// 处理请求,添加引用System.Web
    /// </summary>
    class Myhandle:IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += MyRequest;
        }
        public void Dispose()
        {
           
        }
        protected void MyRequest(object sender, EventArgs e)
        {

System.Web.HttpApplication app = (System.Web.HttpApplication)sender;
            HttpContext context = app.Context;
            HttpResponse response = context.Response;

            string path = app.Context.Request.Path;

            // app.Context.Response.Write(path);
            string fname = System.IO.Path.GetFileName(path);
            if (fname.Contains(".html"))
            {
                string pathWithOutFilename = path.Replace(fname, "");
                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("([A-Za-z1-9]{1,})\\-(\\d+).html");
                System.Text.RegularExpressions.Match match = reg.Match(fname);

                if (match.Success)
                {
                    //for (int i = 0; i < match.Groups.Count; i++)
                    //    app.Context.Response.Write(match.Groups[i].Value+"<br/>");
                    path = "~" + pathWithOutFilename + match.Groups[1].Value + ".aspx?id=" + match.Groups[2].Value;

                    ///http://localhost:6685/Read-14562.html
                    ///转换成实际的 http://localhost:6685/Read.aspx?id=14562
                    context.RewritePath(path);
                }
                else
                {
                    path = path.Replace(".do", ".aspx");
                    path = path.Replace(".html", ".aspx");
                    context.RewritePath("~" + path);
                }
            }

    }
      ///网站项目中添加对该类库的引用
      ///Web.config文件中加入注册处理程序
      //<httpModules>
      //  <add name="MyModule" type="handle.Myhandle,handle"/>  ///加入这一句,handle为类库项目名,Myhandle为类名
      //  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      //</httpModules>
}

IIS设置html由asp_net处理。。

相关文章
|
4月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
128 4
|
22天前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
21天前
|
XML 开发框架 .NET
.NET 9 中 LINQ 新增功能实操
.NET 9 中 LINQ 新增功能实操
|
22天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
22天前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
22天前
|
网络协议 网络安全 Apache
一个整合性、功能丰富的.NET网络通信框架
一个整合性、功能丰富的.NET网络通信框架
|
25天前
|
消息中间件 开发框架 .NET
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
【11月更文挑战第7天】本文介绍了 ASP.NET Core 中的 `IHostedService` 和 `BackgroundService` 接口及其用途。`IHostedService` 定义了 `StartAsync` 和 `StopAsync` 方法,用于在应用启动和停止时执行异步操作,适用于资源初始化和清理等任务。`BackgroundService` 是 `IHostedService` 的抽象实现,简化了后台任务的编写,通过 `ExecuteAsync` 方法实现长时间运行的任务逻辑。文章还提供了创建和注册这两个服务的实战步骤,帮助开发者在实际项目中应用这些功能。
|
2月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
2月前
|
开发框架 .NET 开发工具
.NET 9 中 LINQ 新增的功能
.NET 9 中 LINQ 新增的功能
|
4月前
|
开发框架 JavaScript 前端开发
提升生产力:8个.NET开源且功能强大的快速开发框架
提升生产力:8个.NET开源且功能强大的快速开发框架