Beispiel #1
0
        public static IEnumerable <RewriteRule> AtomInvokeParam(SqlExprParams pars)
        {
            var invokeRule = RewriteRule.Create(
                "atomInvokeParam",
                () => RewriteSpecial.Call <RewriteTypes.C2>(null, "Invoke"),
                null,
                null,
                (match, expr, visit) =>
            {
                var exprCall = (MethodCallExpression)expr;
                var origArgs = exprCall.Arguments;

                //Aplicar la transformación del from a los parametros, esto es importante porque el from
                //en algunos casos se usa sólo para especificar el tipo en un método generico pero su valor
                //no es importante.
                var fromArgs = origArgs
                               .Select(x => Rewriter.RecApplyRules(x, ExprParamsRules(pars), ExcludeFromRewrite))
                               .ToList()
                ;

                var arg  = fromArgs[0];
                var args = fromArgs;

                var atomArg  = Expression.Call(typeof(RewriteSpecial), "Atom", new[] { arg.Type }, arg);
                var atomArgs = new[] { atomArg }.Concat(args.Skip(1)).ToList();



                var retCall = Expression.Call(exprCall.Object, exprCall.Method, atomArgs);
                return(retCall);
            });

            return(new[] { invokeRule });
        }
Beispiel #2
0
        /// <summary>
        /// 获取栏目地址
        /// </summary>
        /// <param name="cls"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        public string GetClassUrl(Class cls, int page)
        {
            string url = "";

            if (BasePage.SystemSetting.EnableReWrite)
            {
                switch (cls.ModelID)
                {
                case 1:
                    url = RewriteRule.Get().NewsClass.Exp;
                    break;

                case 4:
                    url = RewriteRule.Get().BookClass.Exp;
                    break;

                case 7:
                    url = RewriteRule.Get().ProductList.Exp;
                    break;

                default:
                    url = string.Format("/Dynamic/Book/Class.aspx?id={0}&page={1}", cls.ID, page);
                    break;
                }
                url = url.Replace("{id}", cls.ID.ToS());
                url = url.Replace("{classname}", cls.ClassName);
                url = url.Replace("{page}", page.ToS());
            }
            else
            {
                url = string.Format("/Dynamic/Book/Class.aspx?id={0}&page={1}", cls.ID, page);
            }
            return(url);
        }
Beispiel #3
0
        protected void btn_Save_Click(object sender, EventArgs e)
        {
            var s = RewriteRule.Get();

            s.NewsClass = new ExpAndTarget {
                id = rbl_NewsList.SelectedValue, Exp = rbl_NewsList.SelectedItem.Text
            };
            s.NewsPage = new ExpAndTarget {
                id = rbl_News.SelectedValue, Exp = rbl_News.SelectedItem.Text
            };

            s.BookClass = new ExpAndTarget()
            {
                id = rbl_BookList.SelectedValue, Exp = rbl_BookList.SelectedItem.Text
            };                                                                                                        //new KeyValuePair<string,string>(txt_BookClass.Text,txt2_BookClass.Text);
            s.BookInfo = new ExpAndTarget()
            {
                id = rbl_BookInfo.SelectedValue, Exp = rbl_BookInfo.SelectedItem.Text
            };                                                                                                       //new KeyValuePair<string,string>(txt_BookInfo.Text,txt2_BookInfo.Text);
            s.BookChapter = new ExpAndTarget()
            {
                id = rbl_Chapter.SelectedValue, Exp = rbl_Chapter.SelectedItem.Text
            };                                                                                                        //new KeyValuePair<string,string>(txt_BookChapter.Text,txt2_BookChapter.Text);

            s.ProductList = new ExpAndTarget {
                id = rbl_ProductList.SelectedValue, Exp = rbl_ProductList.SelectedItem.Text
            };
            s.Product = new ExpAndTarget {
                id = rbl_Product.SelectedValue, Exp = rbl_Product.SelectedItem.Text
            };
            s.Save();
            Js.AlertAndChangUrl("保存成功!", "RewriteSetting.aspx");
        }
        public void PathRouteRewrite()
        {
            var rule    = RewriteRule.Create("http://163.com/news/{path*}", "http://163.com/{path*}");
            var request = new HttpRequestMessage(HttpMethod.Get, "http://163.com/news/Test/TestNews");

            request = rule.Rewrite(request);
            Assert.AreEqual(request.RequestUri.AbsoluteUri, "http://163.com/Test/TestNews");
        }
        public void HostAndPath()
        {
            var request = CreateRequest();

            var rule = RewriteRule.Create("//{host*}/{path*}", "//proxy.net/{host}/{path}");

            request = rule.Rewrite(request);

            Assert.AreEqual(request.RequestUri.AbsoluteUri, "http://proxy.net/www.163.com/News/Test/1");
        }
 public void StoreRewriteRule(RewriteRule rule)
 {
     _termDatabase.CurrentFrame.Substitutions.Add(
         new Substitution
     {
         MatchTerm      = StoreTerm(rule.MatchTerm),
         SubstituteTerm = StoreTerm(rule.SubstituteTerm)
     }
         );
 }
        public void Port2()
        {
            var request = CreateRequest();

            var rule = RewriteRule.Create("/{path*}", "//www.jumony.net:?/{path}");

            request = rule.Rewrite(request);

            Assert.AreEqual(request.RequestUri.AbsoluteUri, "http://www.jumony.net:8080/News/Test/1");
        }
        public void Host4()
        {
            var request = CreateRequest();

            var rule = RewriteRule.Create("//www.163.com", "//www.jumony.net");

            request = rule.Rewrite(request);

            Assert.AreEqual(request.RequestUri.AbsoluteUri, "http://www.jumony.net/News/Test/1");
        }
Beispiel #9
0
        public static RewriteRules GetCurrentRewriteRules()
        {
            string cacheName = "CommonConfiguration_RewriteRules_TTVH";

            if (null != HttpContext.Current.Cache[cacheName])
            {
                try
                {
                    return((RewriteRules)HttpContext.Current.Cache[cacheName]);
                }
                catch
                {
                    return(new RewriteRules());
                }
            }
            else
            {
                try
                {
                    string      configFilePath = HttpContext.Current.Server.MapPath("/Config/RewriteRules.config"); //@"D:\Running projects\VC Corporation\Dantri\Dantri.Cached\CacheSettings.config";
                    XmlDocument xmlDoc         = new XmlDocument();
                    xmlDoc.Load(configFilePath);

                    RewriteRules rules = new RewriteRules();

                    XmlNodeList nlstRules = xmlDoc.DocumentElement.SelectNodes("//rules/rule");

                    for (int i = 0; i < nlstRules.Count; i++)
                    {
                        RewriteRule rule = new RewriteRule();
                        rule.Url     = nlstRules[i].SelectSingleNode("url").InnerText;
                        rule.Rewrite = nlstRules[i].SelectSingleNode("rewrite").InnerText;

                        rules.List.Add(rule);
                    }

                    XmlNode nodeFileSettingCacheExpire = xmlDoc.DocumentElement.SelectSingleNode("//Configuration/RewriteRulesFile");
                    long    fileSettingCacheExpire     = Lib.Object2Long(nodeFileSettingCacheExpire.Attributes["cacheExpire"].Value);
                    if (fileSettingCacheExpire <= 0)
                    {
                        fileSettingCacheExpire = 3600;// default 1h
                    }

                    CacheDependency fileDependency = new CacheDependency(configFilePath);
                    HttpContext.Current.Cache.Insert(cacheName, rules, fileDependency, DateTime.Now.AddSeconds(fileSettingCacheExpire), TimeSpan.Zero, CacheItemPriority.Normal, null);

                    return(rules);
                }
                catch
                {
                    return(new RewriteRules());
                }
            }
        }
Beispiel #10
0
        /// <summary>
        /// 获取问答url地址
        /// </summary>
        /// <param name="qs"></param>
        /// <param name="cls"></param>
        /// <returns></returns>
        public string GetBookUrl(Book b, Class cls)
        {
            string url = RewriteRule.Get().BookInfo.Exp;

            url = url.Replace("{id}", b.ID.ToS());
            url = url.Replace("{classname}", b.ClassName);
            url = url.Replace("{title}", b.Title);
            url = url.Replace("{author}", b.Author);

            return(url);
        }
Beispiel #11
0
        public void RewriteSimple()
        {
            var rule = RewriteRule.Create("", (bool x) => true || x, x => true);
            var a    = false;

            Expression <Func <bool> > expr = () => true || a;
            var ret = Rewriter.GlobalApplyRule(expr.Body, rule, x => x);
            var str = ret.ToString();

            Assert.AreEqual(str, "True");
        }
Beispiel #12
0
 /// <summary>
 /// 获取信息地址
 /// </summary>
 /// <param name="news">信息</param>
 /// <param name="cls">栏目</param>
 /// <returns></returns>
 public string GetNewsUrl(News news, Class cls)
 {
     if (BasePage.SystemSetting.EnableReWrite)
     {
         string url = RewriteRule.Get().NewsPage.Exp;
         url = url.Replace("{newsid}", news.ID.ToS());
         return(url);
     }
     else
     {
         return(string.Format("/Dynamic/News/News.aspx?id={0}", news.ID));
     }
 }
        public void AddRules(XmlNode node)
        {
            var ruleFor   = XmlUtil.GetAttribute("for", node);
            var ruleMatch = XmlUtil.GetAttribute("match", node);

            var rule = new RewriteRule
            {
                RuleFor   = ruleFor,
                RuleMatch = ruleMatch,
            };

            _rewriteRules.Add(rule);
        }
Beispiel #14
0
        /*
         * <rule name="Danh sách tin (Trang đầu tiên)">
         *              <url>/([0-9]+)CT([0-9]+)/([^/]+).htm</url>
         *              <rewrite>/List.aspx?CatParentID=$2&amp;CatID=$1&amp;CatName=$3&amp;PageIndex=1&amp;PageType=2</rewrite>
         *      </rule>
         */
        public RewriteRule GetListPageRule(bool havePaging)
        {
            for (int i = 0; i < List.Count; i++)
            {
                RewriteRule rule = (RewriteRule)List[i];
                rule.Rewrite = HttpUtility.HtmlDecode(rule.Rewrite);
                if (rule.Rewrite.Contains("/List.aspx") && rule.Rewrite.Contains("/List.aspx?CatParentID=$2&CatID=$1&CatName=$3&PageIndex=1&PageType=2"))
                {
                    rule.Rewrite = rule.Rewrite.Replace("$1", "{0}").Replace("$2", "{1}").Replace("&CatName=$3", "");
                    return(rule);
                }
            }

            return(new RewriteRule());
        }
Beispiel #15
0
        //dong sự kiện: /ListNewsByEvent.aspx?CatParentID=$3&amp;CatID=$1&amp;PageIndex=1&amp;PageType=2&amp;ThreadID=$2
        public RewriteRule GetThreadPageRule()
        {
            for (int i = 0; i < List.Count; i++)
            {
                RewriteRule rule = (RewriteRule)List[i];
                rule.Rewrite = HttpUtility.HtmlDecode(rule.Rewrite);
                if (rule.Rewrite.Contains("/ListNewsByEvent.aspx?CatParentID=$3&CatID=$1&PageIndex=1&PageType=2&ThreadID=$2"))
                {
                    rule.Rewrite = rule.Rewrite.Replace("$1", "{0}").Replace("$2", "{1}").Replace("$3", "{2}");
                    return(rule);
                }
            }

            return(new RewriteRule());
        }
Beispiel #16
0
        public async Task ExecuteAsync(AddRedirectRuleCommand command, IExecutionContext executionContext)
        {
            var rule = new RewriteRule();

            rule.WriteFrom = command.WriteFrom;
            rule.WriteTo   = command.WriteTo;
            _entityAuditHelper.SetCreated(rule, executionContext);

            // TODO: Should be checking uniqueness?

            _dbContext.RewriteRules.Add(rule);
            await _dbContext.SaveChangesAsync();

            command.OutputRedirectRuleId = rule.RewriteRuleId;
        }
Beispiel #17
0
        //Pages/Thread.aspx?PageType=2&amp;threadid=$1&amp;pageindex=$3&amp;cat_parentid=1000&amp;cat_id=0

        public RewriteRule GetRuleEvent(string EventId)
        {
            for (int i = 0; i < List.Count; i++)
            {
                RewriteRule rule = (RewriteRule)List[i];
                rule.Rewrite = HttpUtility.HtmlDecode(rule.Rewrite);
                if (rule.Rewrite.Contains("/Pages/Thread.aspx?PageType=2&threadid=$1") && rule.Rewrite.Contains("cat_parentid=1000&cat_id=0"))
                {
                    rule.Rewrite = rule.Rewrite.Replace("$1", "{0}").Replace("&pageindex=$3", "");
                    return(rule);
                }
            }

            return(new RewriteRule());
        }
Beispiel #18
0
        /// <summary>
        /// 获取问答url地址
        /// </summary>
        /// <param name="qs"></param>
        /// <param name="cls"></param>
        /// <returns></returns>
        public string GetBookChapterUrl(BookChapter cp, Class cls)
        {
            if (cp == null || cp.ID < 0)
            {
                return("");
            }
            string url = RewriteRule.Get().BookChapter.Exp;

            url = url.Replace("{id}", cp.ID.ToS());
            url = url.Replace("{classname}", cls.ClassName);
            url = url.Replace("{title}", cp.BookTitle);
            url = url.Replace("{author}", cp.GetBook().Title);

            return(url);
        }
Beispiel #19
0
 public static void Rewrite(this ITree root, RewriteRule rule)
 {
     List<ITree> newNodes = new List<ITree>();
     for (int i = 0; i < root.ChildCount; i++)
     {
         ITree oldNode = root.GetChild(i);
         if (oldNode.HasChild("Only")) continue;
         ITree newNode;
         bool needed = RewriteNode(oldNode, out newNode, rule);
         if (needed) newNodes.Add(newNode);
     }
     foreach (var n in newNodes)
     {
         root.AddChild(n);
     }
 }
        /// <summary>
        /// Maps an EF RewriteRule record from the db into an RewriteRuleSummary
        /// object. If the db record is null then null is returned.
        /// </summary>
        /// <param name="dbRewriteRule">RewriteRule record from the database.</param>
        public virtual RewriteRuleSummary Map(RewriteRule dbRewriteRule)
        {
            if (dbRewriteRule == null)
            {
                return(null);
            }

            var result = new RewriteRuleSummary()
            {
                RewriteRuleId = dbRewriteRule.RewriteRuleId,
                WriteFrom     = dbRewriteRule.WriteFrom,
                WriteTo       = dbRewriteRule.WriteTo
            };

            return(result);
        }
Beispiel #21
0
        //temp: ([0-9]+)N([0-9]+)T([0-9]+)/([^/]+).htm;
        //url: Details.aspx?CatID=$1&amp;NewsID=$2&amp;CatParentID=$3&amp;Type=$3&amp;PageType=2&amp;NewsUrl=$4
        public RewriteRule GetDetailPageRule()
        {
            for (int i = 0; i < List.Count; i++)
            {
                RewriteRule rule = (RewriteRule)List[i];
                rule.Rewrite = HttpUtility.HtmlDecode(rule.Rewrite);
                if (rule.Rewrite.Contains("/Details.aspx?CatID=$1&NewsID=$2&CatParentID=$3&Type=$3&PageType=2&NewsUrl=$4"))
                {
                    rule.Rewrite =
                        rule.Rewrite.Replace("$1", "{0}").Replace("$2", "{1}").Replace("$3", "{2}").Replace(
                            "&NewsUrl=$4", "");
                    return(rule);
                }
            }

            return(new RewriteRule());
        }
Beispiel #22
0
        public void EvalBooleanRule()
        {
            //Evalua las expresiones booleanas, sólo se aplica la regla si la expresión no es ya una constante
            var evalBool = RewriteRule.Create("", (bool x) => RewriteSpecial.NotConstant(x), null, null, (_, x, visit) => ExprEval.EvalExprExpr(x));

            var rules = new[]
            {
                evalBool
            };

            var a = true;
            Expression <Func <bool, bool, bool> > expr = (x, y) => x && y || !(true || a);
            var red = ApplyRules(expr, rules);

            //Note que la expresión !(true || a) se evaluó por completo:
            Assert.AreEqual("(x, y) => ((x AndAlso y) OrElse False)", red.ToString());
        }
Beispiel #23
0
        protected void LoadInfo()
        {
            var s = RewriteRule.Get();

            try
            {
                rbl_NewsList.SelectedValue = s.NewsClass.id;
                rbl_News.SelectedValue     = s.NewsPage.id;

                rbl_BookList.SelectedValue = s.BookClass.id;
                rbl_BookInfo.SelectedValue = s.BookInfo.id;
                rbl_Chapter.SelectedValue  = s.BookChapter.id;

                rbl_ProductList.SelectedValue = s.ProductList.id;
                rbl_Product.SelectedValue     = s.Product.id;
            }
            catch { }
        }
Beispiel #24
0
        public RewriteRule GetMatchingRule(string url)
        {
            Regex rex;

            for (int i = 0; i < List.Count; i++)
            {
                RewriteRule rule = (RewriteRule)List[i];
                rex = new Regex(rule.Url, RegexOptions.IgnoreCase);
                Match match = rex.Match(url);

                if (match.Success)
                {
                    return(rule);
                }
            }

            return(new RewriteRule());
        }
Beispiel #25
0
        public void RewriteArgs()
        {
            var hola = "Hola";
            var rafa = "Rafa";
            Expression <Func <string> > test = () => $"({hola}, {rafa})" + typeof(string).Name;
            var rule = RewriteRule.Create("", (bool x) => x || x, x => x);

            {
                Expression <Func <bool, bool, bool> > expr = (a, b) => a || a;
                var ret = Rewriter.GlobalApplyRule(expr.Body, rule, x => x);
                var str = ret.ToString();
                Assert.AreEqual(str, "a");
            }

            {
                Expression <Func <bool, bool, bool> > expr = (a, b) => a || b;
                var ret = Rewriter.GlobalApplyRule(expr.Body, rule, x => x);
                Assert.AreEqual(ret, expr.Body);
            }
        }
Beispiel #26
0
        public static IEnumerable <RewriteRule> ExprParamsRules(SqlExprParams pars)
        {
            var ret = new List <RewriteRule>();

            //Puede ser null el param en caso de que todo sea por sustituciones del replace
            if (pars.Param != null)
            {
                //Es posible que el fromParam este envuelto en un Convert, por ejemplo cuando se usan propiedades de una interfaz
                ret.Add(
                    RewriteRule.Create(
                        "convertFromParam",
                        (RewriteTypes.C1 p) => RewriteSpecial.Operator <RewriteTypes.C1, RewriteTypes.C2>(p, ExpressionType.Convert),
                        (RewriteTypes.C1 p) => Sql.FromParam <RewriteTypes.C2>(),
                        (match, expr) => match.Args[0] == pars.Param
                        ));

                ret.Add(
                    new RewriteRule(
                        "fromParam",
                        Expression.Lambda(pars.Param), Expression.Lambda(Expression.Call(typeof(Sql), nameof(Sql.FromParam), new[] { pars.Param.Type })), null, null)
                    );
            }
            return(ret);
        }
Beispiel #27
0
        static bool RewriteNode(ITree root, out ITree output, RewriteRule rule)
        {
            ITree newRoot;
            bool needsRewrite = rule(root, out newRoot);
            if (newRoot == null)
            {
                newRoot = new CommonTree(new CommonToken(root.Type, root.Text));

                for (int i = 0; i < root.ChildCount; i++)
                {
                    ITree newChild;
                    bool branchNeedsRewrite = RewriteNode(root.GetChild(i), out newChild, rule);
                    needsRewrite = needsRewrite || branchNeedsRewrite;
                    newRoot.AddChild(newChild);
                }
            }
            output = newRoot;
            return needsRewrite;
        }
        /// <summary>
        /// insert a rewrite rule to pipeline
        /// </summary>
        /// <param name="pipeline">upstream pipeline</param>
        /// <param name="template">rewrite template.</param>
        /// <returns>pipeline with rewrite rule</returns>
        public static IHttpPipeline Rewrite(IHttpPipeline pipeline, RewriteRequestTemplate template)
        {
            var rewriter = RewriteRule.Create(template);

            return(pipeline.JoinPipeline(rewriter));
        }
        /// <summary>
        /// insert a rewrite rule to pipeline
        /// </summary>
        /// <param name="pipeline">upstream pipeline</param>
        /// <param name="upstream">upstream rule, or called route rule.</param>
        /// <param name="downstream">downstream rule, or called rewrite rule</param>
        /// <returns>pipeline with rewrite rule</returns>
        public static IHttpPipeline Rewrite(this IHttpPipeline pipeline, string upstream, string downstream)
        {
            var rewriter = RewriteRule.Create(upstream, downstream);

            return(pipeline.JoinPipeline(rewriter));
        }
        /// <summary>
        /// insert a rewrite rule to pipeline
        /// </summary>
        /// <param name="pipeline">upstream pipeline</param>
        /// <param name="upstreams">upstream rule, or called route rule.</param>
        /// <param name="downstream">downstream rule, or called rewrite rule</param>
        /// <returns>pipeline with rewrite rule</returns>
        public static IHttpPipeline Rewrite(this IHttpPipeline pipeline, params string[] templates)
        {
            var rewriter = RewriteRule.Create(templates);

            return(pipeline.JoinPipeline(rewriter));
        }
 return(UseRouter(pipeline, rules.Select(r => RewriteRule.Create(r.upstreamTemplate, r.downstreamTemplate)).ToArray()));
        /// <summary>
        /// insert a rewrite rule to pipeline
        /// </summary>
        /// <param name="pipeline">upstream pipeline</param>
        /// <param name="upstreams">upstream rule, or called route rule.</param>
        /// <param name="downstream">downstream rule, or called rewrite rule</param>
        /// <returns>pipeline with rewrite rule</returns>
        public static IHttpPipeline Rewrite(IHttpPipeline pipeline, RewriteRequestTemplate[] upstreams, RewriteRequestTemplate downstream)
        {
            var rewriter = new RewriteRule(upstreams, downstream);

            return(pipeline.JoinPipeline(rewriter));
        }