• HttpModule入门


    关于asp.net生命周期的文章,在园子里面已经有好多大牛写了。本想引用曾经在园子里面一个人的文章,一时之间找不到了,只好贴出那篇文章中的一幅图了。

    由上面的铺垫,今天可以开始第一个URLRewrite程序了。

    • 首先我们先创建一个类MyhttpModule.cs
    • 然后配置Web.config(可以理解为添加对自定义的httpmodule的注册信息)
    • 自定义一个正则表达式,URLRewrite中最重要的工具就是正则表达式。这里我的示例:将"http://localhost:1539/Articles/AJAX-PHP-Book-Review.htm"重定向“http://localhost:1539/Product.aspx?ProductID=35”

    MyhttpModule.cs如下:

     public class MyhttpModule:IHttpModule
        {
            Regex reg = new Regex("/Articles/(.+)$");
            public void Dispose()
            {
                
            }
    
            public void Init(HttpApplication context)
            {
                //这个Init方法功能是用来订阅事件,可以理解为过滤器作用。来处理一些请求信息。
               //并且每个请求都会经过这个方法。
                context.BeginRequest += new EventHandler(context_BeginRequest);
            }
    
            void context_BeginRequest(object sender, EventArgs e)
            {
                HttpContext context = HttpContext.Current;
                Match match = reg.Match(context.Request.FilePath);
                if (match.Groups.Count<2)//不匹配match.Groups.Count=1
                {
                    return;
                }
                //如果有一个匹配,就取出匹配的结果。
                string pageName = match.Groups[1].Value;
    
                if (pageName.ToLower() == "ajax-php-book-review.htm")
                {
                    context.RewritePath("~/Product.aspx?ProductID=35");
                }
                else
                {
                    context.Response.Status = "404 NOT FOUND";
                }
            }
        }
    

     接着就是Web.config配置

     <httpModules>
            <add name="MyhttpModule" type="UrlRewriter.MyhttpModule,UrlRewriter"/>
    </httpModules>
    

     这里意思就是调用UrlRewriter.dll中的UrlRewriter.MyhttpModule来处理请求。(UrlRewriter为我的项目名称)

    然后为了可以看到是否起作用了我们还要建一个Product.aspx。因为最终我们会重定向到这个页面。

         protected void Page_Load(object sender, EventArgs e)
            {
                string productId = this.Request["ProductID"];
                if (!string.IsNullOrEmpty(productId))
                {
                    Response.Write(productId);
                }
            }
    

    最后一步就是打开浏览器----》输入:“http://localhost:1539/Articles/AJAX-PHP-Book-Review.htm”

    就可一看到结果为:页面上输出一个35.但是我们请求的URL还是“http://localhost:1539/Articles/AJAX-PHP-Book-Review.htm”。

    这样就可以达到SEO优化的目的,这里演示只是原理的一部分。要到达真正的URLRewrite需要建立一个双向解析的机制,不像这里写死了规则。写死规则只是为了方便探究原理。

  • 相关阅读:
    机器语言与汇编语言的关系
    环境变量
    .NET程序运行过程
    【转】计算机组成原理
    将大型 Page Blob 的页范围进行分段
    价格更低、SLA 更强的全新 Azure SQL 数据库服务等级将于 9 月正式发布
    把二元查找树转换成排序的双向链表
    初识C++
    Linux企业级项目实践之网络爬虫(25)——管理源代码之SVN
    Linux企业级项目实践之网络爬虫(24)——定制规则扩展为垂直爬虫
  • 原文地址:https://www.cnblogs.com/hankskfc/p/2261244.html
Copyright © 2020-2023  润新知