Есть ли метод, который тестирует, если 2 URL-адреса равны, то есть указывают на одно и то же место. Я не говорю о 2 URL-адресах с разными именами доменов, указывающих на один и тот же IP-адрес, но, например, 2 URL-адреса, указывающие на одну и ту же страницу .aspx:
равно этим:
- http://example.com/Products/Default.aspx
- http://example.com/Products/
- ~/Продукты/Default.aspx
- ~/Продукция/
Примечание/assumtions
- Значения QueryString игнорируются
- ASP.NET(Pref С#)
- Default.aspx - это страница по умолчанию
---- ---- ОБНОВЛЕНИЕ
Это очень грубый метод, который проверяет URL-адрес, чтобы увидеть, совпадает ли текущий URL-адрес: Я попробовал создать новый Uri() как с локальными, так и с проверенными URL-адресами, но не знаю, что работает, и спустился по проспекту проверки строки. Реализация SiteMapProvider пропускает этот шаг, если URL начинается с "Http", так как это предполагает внешний URL. Поскольку у меня есть структура SaaS, которая всегда будет обеспечивать относительные пути (так как они могут быть на разных поддоменах), проще удалить вещи.
Любые комментарии по оптимизации? Думаю, для начала мы можем передать переменную, содержащую текущий URL-адрес? Не уверен, что накладные расходы на вызов HttpContext.Current.Request.Url.LocalPath много раз?
/// <summary>
/// Assumes URL is relative aspx page or folder path
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static bool CurrentURLMatch(string url)
{
string localURL = HttpContext.Current.Request.Url.LocalPath;
if (HttpContext.Current.Request.Url.Host == "localhost")
{
localURL = localURL.Substring(localURL.IndexOf('/') + 1);
localURL = localURL.Substring(localURL.IndexOf('/'));
}
string compareURL = url.ToLower();
// Remove QueryString Values
if (localURL.Contains("?"))
{
localURL = localURL.Split('?')[0];
}
if (compareURL.Contains("?"))
{
compareURL = compareURL.Split('?')[0];
}
if (localURL.Contains("#"))
{
localURL = localURL.Split('#')[0];
}
if (compareURL.Contains("?"))
{
compareURL = compareURL.Split('#')[0];
}
// Prepare End of Local URL
if (!localURL.Contains("aspx"))
{
if (!localURL.EndsWith("/"))
{
localURL = String.Concat(localURL, "/");
}
}
// Prepare End of Compare URL
if (!compareURL.Contains("aspx"))
{
if (!compareURL.EndsWith("/"))
{
compareURL = String.Concat(localURL, "/");
}
}
if (localURL.EndsWith(@"/"))
{
localURL = String.Concat(localURL, "Default.aspx");
}
if (compareURL.EndsWith(@"/"))
{
compareURL = String.Concat(compareURL, "Default.aspx");
}
if (compareURL.Contains(@"//"))
{
compareURL = compareURL.Replace(@"//", String.Empty);
compareURL = compareURL.Substring(compareURL.IndexOf("/") + 1);
}
compareURL = compareURL.Replace("~", String.Empty);
if (localURL == compareURL)
{
return true;
}
return false;
}