Ejemplo n.º 1
0
 /// <summary>
 /// 解析入口
 /// </summary>
 /// <param name="urlInfo"></param>
 /// <param name="site"></param>
 /// <param name="skin"></param>
 /// <param name="page"></param>
 /// <param name="pageCode"></param>
 public void Parse(MaUrl urlInfo, IMaSite site, IMaSkin skin, MaPage page, ref StringBuilder pageCode)
 {
     //处理页面临时变量
     foreach (KeyValuePair <string, string> item in Htmx.HtmxHandler.GetThisPageTempVariable())
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理页面变量
     foreach (KeyValuePair <string, string> item in page.GetPageVariable())
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理皮肤变量
     foreach (KeyValuePair <string, string> item in ((MaConfig)skin).Variables)
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理站点变量
     foreach (KeyValuePair <string, string> item in ((MaConfig)site).Variables)
     {
         pageCode = pageCode.Replace("{$" + item.Key + "}", item.Value);
     }
     //处理基本变量
     pageCode = pageCode.Replace("{$_ma_this_domain}", urlInfo.Domain.Domain);
     pageCode = pageCode.Replace("{$_ma_this_root_domain}", urlInfo.Domain.MainDomain);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 页面处理工具
        /// </summary>
        /// <param name="context"></param>
        /// <param name="requestType"></param>
        /// <param name="url"></param>
        /// <param name="pathTranslated"></param>
        /// <returns></returns>
        public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
        {
            if (MaWeb.Instance != null)
            {
                IMaSite _site = MaWeb.Instance.GetSite(context);
                if (_site == null)
                {
                    throw new Exception("WebApp配置错误,请检查Ma.Config配置文件[MaWeb]配置结点!");
                }
                IMaSkin _skin = _site.GetSkinConfig(context);
                MaPage  _page = _site.GetRequestConfig(context);
                if (_page == null)
                {
                    throw new Exception("WebApp配置错误,请检查Ma.Config配置文件[MaWeb]配置结点,没有设定默认页面处理类!");
                }
                IHttpHandler _handler = _page.GetHandler(context);

                context.Response.Filter = new HtmxFilter(context.Response.Filter, MaUrl.Current, _page);

                if (_handler is HtmxHandlerBase)
                {
                    HtmxHandlerBase _maHandler = (HtmxHandlerBase)_handler;
                    _maHandler.InitPage(context, MaUrl.Current, MaWeb.Instance, _site, _skin, _page);
                }
                return(_handler);
            }
            else
            {
                throw new Exception("WebApp配置错误,请检查Ma.Config配置文件[MaWeb]配置结点");
            }
        }
Ejemplo n.º 3
0
        void CachePage()
        {
            //静态文件不存在,重写URL
            HttpContext.Current.RewritePath(MaUrl.Current.AbsolutePath + "l");
            MaPage _page = MaWeb.Instance.GetSite(HttpContext.Current).GetRequestConfig(HttpContext.Current);

            //缓存页面,非编辑试图
            HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddSeconds(_page.UpdateTime));
            HttpContext.Current.Response.Cache.SetMaxAge(new TimeSpan((long)((long)_page.UpdateTime * 10000000)));
            HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
            HttpContext.Current.Response.Cache.SetValidUntilExpires(true);
            HttpContext.Current.Response.Cache.VaryByParams["none"] = true;//不带参数缓存页面
            HttpContext.Current.Response.Cache.SetVaryByCustom(MaUrl.Current.AbsolutePath + "l");
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 初始化页面信息
        /// </summary>
        /// <param name="context"></param>
        /// <param name="url"></param>
        /// <param name="web"></param>
        /// <param name="site"></param>
        /// <param name="skin"></param>
        /// <param name="page"></param>
        public virtual void InitPage(HttpContext context, MaUrl url, IMaWeb web, IMaSite site, IMaSkin skin, MaPage page)
        {
            //Http对象
            Context  = context;
            Request  = context.Request;
            Response = context.Response;

            //Ma对象
            m_maUrl  = url;
            m_maweb  = web;
            m_maSite = site;
            m_maSkin = skin;
            m_maPage = page;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 标签处理虚方法
        /// </summary>
        /// <param name="urlInfo"></param>
        /// <param name="site"></param>
        /// <param name="skin"></param>
        /// <param name="page"></param>
        /// <param name="pageCode"></param>
        public virtual void Parse(MaUrl urlInfo, IMaSite site, IMaSkin skin, MaPage page, ref StringBuilder pageCode)
        {
            if (string.IsNullOrEmpty(m_tagRegexStr))
            {
                throw new Exception("解析表情出错,当前类没有标签匹配字符串串,请给[TagRegexStr]赋值");
            }

            //查询的正则表达式
            Regex           re      = new Regex(m_tagRegexStr, RegexOptions.IgnoreCase);
            MatchCollection matches = re.Matches(pageCode.ToString());

            foreach (Match var in matches)
            {
                MaTag _maTag = new MaTag(var.Value, urlInfo);
                ParseTag(urlInfo, site, skin, page, ref pageCode, _maTag);
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// 标签处理抽象函数
 /// </summary>
 /// <param name="urlInfo"></param>
 /// <param name="site"></param>
 /// <param name="skin"></param>
 /// <param name="page"></param>
 /// <param name="pageCode"></param>
 /// <param name="tag"></param>
 public abstract void ParseTag(MaUrl urlInfo, IMaSite site, IMaSkin skin, MaPage page, ref StringBuilder pageCode, MaTag tag);
Ejemplo n.º 7
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="sink"></param>
        /// <param name="url"></param>
        /// <param name="page"></param>
        public HtmxFilter(Stream sink, MaUrl url, MaPage page)
        {
            m_sink = sink;

            //非编辑模式
            switch (url.RequestView)
            {
            case MaRequestView.Put:
            {
                switch (page.SaveWay)
                {
                case MaPageSaveWay.Null:
                    break;

                case MaPageSaveWay.Save:
                {
                    //保存静态文件
                    if (!(new FileInfo(url.SavePath)).Directory.Exists)
                    {
                        (new FileInfo(url.SavePath)).Directory.Create();
                    }
                    m_fs = new FileStream(url.SavePath, FileMode.OpenOrCreate, FileAccess.Write);
                }
                break;

                case MaPageSaveWay.Cache:
                {
                    #region 默认缓存模式

                    //设置页的可缓存性
                    HttpCacheability _cacheability = HttpCacheability.Server;
                    if (!System.Enum.TryParse <HttpCacheability>(page.Location, out _cacheability))
                    {
                        _cacheability = HttpCacheability.Server;
                    }
                    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Server);
                    //是否应忽略由使缓存无效的客户端发送的 HTTP Cache-Control 标头
                    HttpContext.Current.Response.Cache.SetValidUntilExpires(true);

                    //设置页缓存的到期时间
                    HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddSeconds(page.UpdateTime));
                    HttpContext.Current.Response.Cache.SetMaxAge(new TimeSpan((long)((long)page.UpdateTime * 10000000)));

                    //根据 HTTP 标头值进行缓存
                    if (!string.IsNullOrEmpty(page.Header))
                    {
                        HttpContext.Current.Response.Cache.VaryByHeaders[page.Header] = true;
                    }
                    //使用参数对页的各个版本进行缓存
                    if (!string.IsNullOrEmpty(page.Param))
                    {
                        HttpContext.Current.Response.Cache.VaryByParams[page.Param] = true;
                    }
                    //使用自定义字符串对页的各个版本进行缓存
                    if (!string.IsNullOrEmpty(page.Custom))
                    {
                        HttpContext.Current.Response.Cache.SetVaryByCustom(page.Custom);
                    }

                    #endregion
                }
                break;

                case MaPageSaveWay.None:
                    break;

                default:
                    break;
                }
            }
            break;

            case MaRequestView.Edit:
                break;

            case MaRequestView.Update:
            {
                //模块中处理
            }
            break;

            case MaRequestView.Delete:
            {
                //模块中处理
            }
            break;

            case MaRequestView.Save:
            {
                //保存静态文件
                if (!(new FileInfo(url.SavePath)).Directory.Exists)
                {
                    (new FileInfo(url.SavePath)).Directory.Create();
                }
                m_fs = new FileStream(url.SavePath, FileMode.OpenOrCreate, FileAccess.Write);
            }
            break;

            case MaRequestView.Null:
            {
                //模块中处理
            }
            break;

            case MaRequestView.Cache:
            {
                //模块中处理
            }
            break;

            default:
                break;
            }
        }