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 }); }
/// <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); }
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"); }
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()); } } }
/// <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); }
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"); }
/// <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); }
/* * <rule name="Danh sách tin (Trang đầu tiên)"> * <url>/([0-9]+)CT([0-9]+)/([^/]+).htm</url> * <rewrite>/List.aspx?CatParentID=$2&CatID=$1&CatName=$3&PageIndex=1&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()); }
//dong sự kiện: /ListNewsByEvent.aspx?CatParentID=$3&CatID=$1&PageIndex=1&PageType=2&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()); }
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; }
//Pages/Thread.aspx?PageType=2&threadid=$1&pageindex=$3&cat_parentid=1000&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()); }
/// <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); }
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); }
//temp: ([0-9]+)N([0-9]+)T([0-9]+)/([^/]+).htm; //url: Details.aspx?CatID=$1&NewsID=$2&CatParentID=$3&Type=$3&PageType=2&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()); }
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()); }
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 { } }
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()); }
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); } }
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); }
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)); }