utilizes my custom DocParser class here https://ronniediaz.com/2013/08/23/parse-xml-to-dynamic-expandoobject-c-net-4-0/
void Application_BeginRequest(object sender, EventArgs e)
{
//string path = Request.Url.ToString();
string path = Request.Path;
if (Regex.IsMatch(path.ToLower(), ".*[.](jpg|png|gif|css|js|pdf|ico|woff|svg|eot|ttf)$"))
{
//var h = Regex.Replace(path.ToLower(), ".*/(.*)/(.*)$", "~/$1/$2", RegexOptions.Singleline);
//Context.RewritePath(path);
return;
}
//TODO: authorize user/request
DocParser dp = new DocParser(Server.MapPath("~/rewrite.xml"));
var rules = dp.GetElements("*/rule");
foreach (var r in rules)
{
if (string.IsNullOrEmpty(r.match_url)) {
Shared.HandleError("Global.asax::null or empty match_url encountered");
}
if (string.IsNullOrEmpty(r.action_url))
{
Shared.HandleError("Global.asax::null or empty action_url encountered");
}
if (Regex.IsMatch(path, r.match_url,RegexOptions.IgnoreCase))
{
List<object> qsvars = new List<object>();
foreach (Match m in Regex.Matches(path, r.match_url, RegexOptions.IgnoreCase))
{
for (int i=1;i<m.Groups.Count;i++)
{
qsvars.Add(m.Groups[i].Value);
}
}
//Context.RewritePath(string.Format(r.action_url,qsvars.ToArray()) + "&rewrite=1");
Context.RewritePath(string.Format(r.action_url, qsvars.ToArray()));
}
}
}
rewrite.xml examples
<?xml version="1.0" encoding="utf-8" ?>
<rules>
<rule match_url="^/home" action_url="~/home.aspx" />
<rule match_url="^/login" action_url="~/default.aspx" />
<rule match_url="^/register" action_url="~/welcome/register.aspx" />
<rule match_url="^/logout" action_url="~/logout.aspx" />
<rule match_url="^/default/(.*)" action_url="~/default.aspx?q={0}" />
<rule match_url="^/test/(.*)/(.*)" action_url="~/test.aspx?q={0}&r={1}" />
</rules>
Leave a comment