• 一个页面标题和过滤输出的解决方案(下)


    上一篇说到:为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字。

    抽象类代码简洁如下:

    public abstract class ReplaceTextListBase
        {
            /// 
    <summary>
            /// 将被返回的替换文本集合列表
            /// 
    </summary>
            public Dictionary
    <string, string> replaceTextList = new Dictionary<string, string>();
            /// 
    <summary>
            /// 获取当前请求页面的url信息
            /// 
    </summary>
            public Uri PageUrl { get { return HttpContext.Current.Request.Url; } }
            /// 
    <summary>
            /// 获取html的title的正则
            /// 
    </summary>
            public string TitleRegex { get { return "
    <title.*>.*</title>"; } }
            public string TitleFormat(string titleText)
            {
                return "
    <title>" + titleText + "</title>";
            }
            /// 
    <summary>
            /// 获取html的Description的正则
            /// 
    </summary>
            public string DescriptionRegex { get { return "
    <meta[^<>]+name=[\"\']description[^<>]*[/]>"; } }
            public string DescriptionFormat(string descriptionText)
            {
                return "
    <meta id=\"description\" name=\"description\" content=\"" + descriptionText + "\" />";
            }
            /// 
    <summary>
            /// 获取html的Keyword的正则
            /// 
    </summary>
            public string KeywordRegex { get { return "
    <meta[^<>]+name=[\"\']keywords[^<>]*[/]>"; } }
            public string KeywordFormat(string keywordText)
            {
                return "
    <meta id=\"keywords\" name=\"keywords\" content=\"" + keywordText + "\" />";
            }
            /// 
    <summary>
            /// 复写此方法,调用replaceTextList.add()方法后,return replaceTextList;
            /// 
    </summary>
            /// 
    <returns></returns>
            public virtual Dictionary
    <string, string> GetReplaceTextList()
            {
                return replaceTextList;
            }
        }

    抽象类后,留下一个虚方法GetReplaceTextList(), 这是重点

    现在看一下我的示例中的子类的实现,继承自抽象类,复写虚方法:

    public class ReplaceTextList:ReplaceTextListBase
    {
            
    public override System.Collections.Generic.Dictionary<stringstring> GetReplaceTextList()
            {
                replaceTextList.Add(TitleRegex,TitleFormat(
    "TitleRegex"));
                replaceTextList.Add(DescriptionRegex,DescriptionFormat(
    "descriptionttest"));
                replaceTextList.Add(KeywordRegex,KeywordFormat(
    "keywordadfdfdf"));
                
    return replaceTextList;
            }
    }

    代码解析:

    例子中的子类实现很简单,就复写了一个虚方法,最终页面的输出标题为:TitleRegex。其它两个同理。
    如果要替换其它或过滤文件,只要写多几个add方法把要替换的文字给替换掉就行了,具体也可以结合下数据库或其它文件操作

    另外说明:

    例子上,直接就定死了标题输出为:TitleRegex,这里可以结合自己的需要,替换成任意字符串。

    提示:抽象类里还留下了PageUr吧,可以根据Url查出Title和description和keyword来实现自己的扩展。

    另外给出一些我早期实现的思路:

    建数据库表,对url主机头进行分类管理,自己定义替换字符等,最后查询与替换。

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    关于容器和里面元素的间距的排版技巧
    Grafana 通过api create&update dashboard
    .net(c#)生成xml并输出(api的设计)
    Ajax学习总结
    网站内容更新之伪原创七绝招
    并发和多线程(十九)ConcurrentHashMap源码解析(jdk1.8) Diamond
    分布式事务(一)分布式事务理论基础 Diamond
    分布式事务(二)事务基础ACID隔离级别MVCC Diamond
    并发和多线程(十八)CountDownLatch、Semaphore和CyclicBarrier源码解析 Diamond
    分布式事务(三)XA、2PC、3PC Diamond
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1403321.html
Copyright © 2020-2023  润新知