public static Uri AlignServerUrl (Uri configuredServerUrl, WebResourceName referenceResourceNameOrNull)
{
if (referenceResourceNameOrNull != null)
{
var filename = Path.GetFileName (referenceResourceNameOrNull.OriginalAbsolutePath);
if (!string.IsNullOrEmpty (filename))
{
var filenameIndex = referenceResourceNameOrNull.OriginalAbsolutePath.LastIndexOf (filename);
if (filenameIndex != -1)
{
var resourcePath = referenceResourceNameOrNull.OriginalAbsolutePath.Remove (filenameIndex);
var newUri = new Uri (configuredServerUrl, resourcePath);
// Only if new aligned Uri has a different encoded AbsolutePath but is identical when decoded return newUri
// else we assume filename truncation didn't work and return the original configuredServerUrl
if (newUri.AbsolutePath != configuredServerUrl.AbsolutePath)
{
if (DecodeUrlString (newUri.AbsolutePath) == DecodeUrlString (configuredServerUrl.AbsolutePath))
{
return newUri;
}
s_logger.DebugFormat ("Aligned decoded resource uri path '{0}' different from server uri '{1}'", newUri.AbsolutePath, configuredServerUrl.AbsolutePath);
}
}
}
}
return configuredServerUrl;
}