Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET- Relative Links in absolute Links umwandeln II

Noch ein kleiner Nachtrag zum vorangegangenen Posting. Es kann Situationen geben, in denen man in diesem Zusammenhang auf die ResolveUrl()-Methode nicht zugreifen bzw. sie nicht benutzen kann, z.B. wenn man UrlRewritingNet einsetzt (hier wird ResolveUrl dann immer ausgehend vom physisch tatsächlich verwendeten WebForm aufgelöst).

Aber man kann sich auch hier behelfen, in dem man die Verzeichnisse, die der Pfad relativ "nach unten" geht einfach von denen abzieht, die tatsächlich in der aktuellen URL vorhanden sind. Nachfolgend die abgeänderte Matching-Methode, die hier zu später Stunde eben entstanden ist.

private string RelativeUrlMatch(Match m)
{
    string url = m.Groups[3].Value;
    if (!url.StartsWith("http://"))
    {
        if (!url.StartsWith("../"))
        {
            url = "http://" + Request.Url.Host + "/" + url;
            return m.ToString().Replace("/" + m.Groups[3].Value, url);
        }
        else
        {
            int removeDirCount = url.Split(new string[] { "../" }, 999, StringSplitOptions.None).Length + 1;
            url = url.Replace("../", string.Empty);
            string[] baseDirectories = Path.GetDirectoryName(Request.Path).Split('\\');
            string newBaseUrl = string.Empty;
            for (int i = 0; i <= baseDirectories.Length - removeDirCount; i++)
            {
                newBaseUrl = newBaseUrl + baseDirectories[i] + "/";
            }
            url = "http://" + Request.Url.Host + newBaseUrl + url;
            return m.ToString().Replace(m.Groups[3].Value, url);
        }
    }
    else
    {
        return m.ToString();
    }
}

Natürlich ne Ecke aufwendiger, aber es funktioniert, wie man hier sehen kann.



« Zurück  |  Weiter »