Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET- Relative Links in absolute Links umwandeln

Es gibt Fälle, in denen man keine relativen Links setzen sollte - zum Beispiel wenn man Inhalte einer Website, die sonst in HTML gerendert werden, als RSS-Feed bereit stellt.

Wenn man keine direkte Möglichkeit der Einflussnahme auf den generierten HTML-Code hat, kann man sich mit folgendem Snippet behelfen und das Ganze automatisiert regeln:

protected override void Render(HtmlTextWriter writer)
{
    TextWriter output = new StringWriter();
    base.Render(new HtmlTextWriter(output));
    string html = output.ToString();
    Regex r = new Regex("(<(?:.*?)\\s)href\\s*=([\\s\"'])*/?([^\\2]+?)\\2((?:.*?)>)", RegexOptions.IgnoreCase);
    html = r.Replace(html, new MatchEvaluator(RelativeUrlMatch));
    writer.Write(html);
}

private string RelativeUrlMatch(Match m)
{
    return m.ToString().Replace(m.Groups[3].Value, "http://" + HttpContext.Current.Request.Url.Host + Page.ResolveUrl(m.Groups[3].Value));
}

Der Code sorgt dafür, dass alle relativen Urls im Output einer Seite in absolute, voll qualifizierte Urls inklusive Domain umgewandelt werden. Damit meckert dann auch der RSS-Validator nicht mehr :-).

Kommentare

  1. Karsten schrieb am Freitag, 14. September 2007 22:11:00 Uhr:

    Hilfreich! Da wird man alt wie ein Ochse, aber es gibt immer wieder neue Funktionen, die man nicht kennt. Danke.


« Zurück  |  Weiter »