private static void ProcessParameters(CacheController cacheCtrl, RewriterAction action, int PortalId)
{
if ((action.ModuleUrl.Trim().Length > 0))
{
//split the value into an array based on "/" ( ie. /tabid/##/ )
string parameters = action.ModuleUrl.Replace("\\", "/").TrimStart('/');
var rule = cacheCtrl.GetModuleRule(action.CultureCode, action.TabId, parameters);
if (rule == null)
{
rule = cacheCtrl.GetCustomModuleRule(action.CultureCode, action.TabId, parameters);
if (rule != null)
{
if (rule.Action == UrlRuleAction.Redirect)
{
if (rule.RemoveTab)
{
action.RedirectPage = "";
}
action.RedirectModule = rule.ReplaceRedirectDestination(parameters);
action.DoRedirect = true;
action.Raison += "+ModuleRule:" + parameters + ">" + action.RedirectModule;
}
else
{
action.ModuleParameters = rule.ReplaceUrl(parameters);
action.WorkUrl = "";
}
return;
}
}
if (rule != null)
{
if (rule.Action == UrlRuleAction.Redirect)
{
if (rule.RemoveTab)
{
//action.RedirectUrl = redirect.RedirectUrl.Replace("/" + tabUrl, "");
action.RedirectPage = "";
}
//action.RedirectUrl = redirect.RedirectUrl.Replace(parameters.TrimStart('/'), rule.RedirectDestination);
action.RedirectModule = rule.RedirectDestination;
action.DoRedirect = true;
action.Raison += "+ModuleRule:" + rule.Url + ">" + rule.RedirectDestination;
}
else if (parameters != rule.Url) // because different case
{
action.RedirectPage = rule.Url;
action.DoRedirect = true;
action.Raison += "+Wrong case or url";
}
action.ModuleParameters = rule.Parameters;
action.WorkUrl = "";
return;
}
else
{
//if (!HttpContext.Current.Request.IsAuthenticated)
if (UrlRewiterSettings.IsManage404(PortalId))
{
action.ModuleNotFound = true;
}
}
action.QueryParameters = "";
string[] splitParameters = parameters.Split('/');
string parameterName;
string parameterValue;
//create a well formed querystring based on the array of parameters
for (int parameterIndex = 0; parameterIndex < splitParameters.Length; parameterIndex++)
{
//ignore the page name
if (splitParameters[parameterIndex].IndexOf(".aspx", StringComparison.InvariantCultureIgnoreCase) == -1)
{
//get parameter name
parameterName = splitParameters[parameterIndex].Trim();
if (parameterName.Length > 0)
{
//rule = GetModuleRule(portalId, CultureCode, TabId, parameterName);
rule = null;
//add parameter to SendTo if it does not exist already && not pagename
if (action.QueryParameters.IndexOf("?" + parameterName + "=", StringComparison.InvariantCultureIgnoreCase) == -1 &&
action.QueryParameters.IndexOf("&" + parameterName + "=", StringComparison.InvariantCultureIgnoreCase) == -1 &&
(parameterIndex != splitParameters.Length - 1 || rule != null))
{
//get parameter value
parameterValue = "";
if (rule != null)
{
action.QueryParameters += "&" + rule.Parameters;
}
else
{
action.QueryParameters += "&" + parameterName;
if (parameterIndex < splitParameters.Length - 1)
{
parameterIndex += 1;
if (!String.IsNullOrEmpty(splitParameters[parameterIndex].Trim()))
{
parameterValue = splitParameters[parameterIndex].Trim();
parameterValue = parameterValue.Replace(".aspx", "");
}
}
//add the parameter value
if (parameterValue.Length > 0)
{
action.QueryParameters += "=" + parameterValue;
}
}
}
}
}
}
}
}