string ResolveClientUrlInternal (string relativeUrl) {
if (relativeUrl.StartsWith (J2EE.J2EEConsts.ACTION_URL_PREFIX, StringComparison.Ordinal))
return CreateActionUrl (relativeUrl.Substring (J2EE.J2EEConsts.ACTION_URL_PREFIX.Length));
if (relativeUrl.StartsWith (J2EE.J2EEConsts.RENDER_URL_PREFIX, StringComparison.Ordinal))
return ResolveClientUrl (relativeUrl.Substring (J2EE.J2EEConsts.RENDER_URL_PREFIX.Length));
#endif
if (VirtualPathUtility.IsAbsolute (relativeUrl) || relativeUrl.IndexOf (':') >= 0)
return relativeUrl;
HttpContext context = Context;
HttpRequest req = context != null ? context.Request : null;
if (req != null) {
string templateSourceDirectory = TemplateSourceDirectory;
if (templateSourceDirectory == null || templateSourceDirectory.Length == 0)
return relativeUrl;
string basePath = req.ClientFilePath;
if (basePath.Length > 1 && basePath [basePath.Length - 1] != '/')
basePath = VirtualPathUtility.GetDirectory (basePath, false);
if (VirtualPathUtility.IsAppRelative (relativeUrl))
return VirtualPathUtility.MakeRelative (basePath, relativeUrl);
string templatePath = VirtualPathUtility.AppendTrailingSlash (templateSourceDirectory);
if (basePath.Length == templatePath.Length && String.CompareOrdinal (basePath, templatePath) == 0)
return relativeUrl;
relativeUrl = VirtualPathUtility.Combine (templatePath, relativeUrl);
return VirtualPathUtility.MakeRelative (basePath, relativeUrl);
}
return relativeUrl;
}