Permanente Umleitung in ASP.NET MVC (Teil 2)
Kommentare

Einen permanenten Redirector schreiben

Die Lösung für ASP.NET MVC ist nicht so trivial zu finden, wie es zunächst scheinen mag. Man könnte meinen, dass lediglich der Code von RedirectResult zu kopieren

Einen permanenten Redirector schreiben

Die Lösung für ASP.NET MVC ist nicht so trivial zu finden, wie es zunächst scheinen mag. Man könnte meinen, dass lediglich der Code von RedirectResult zu kopieren und der Aufruf von Redirect durch einen Aufruf der neueren Methode RedirectPermanent zu ersetzen ist. Dies würde auch funktionieren und das natürliche Vorgehen sein, wenn man garantieren könnte, dass der permanente Redirector immer im Kontext von .NET 4-Anwendungen verwendet wird. Nun wurde aber ASP.NET MVC (zumindest seit der neuesten Version 2, die gerade mit Visual Studio 2010 veröffentlicht wurde) nicht gegen .NET 4 kompiliert. Stattdessen kommt die Version nur mit .NET 3.5-Code daher, der problemlos innerhalb von .NET-4-Anwendungen läuft. Das heißt, dass Sie Ihre eigene PermanentRedirectResult-Klasse erstellen, sie für die Verwendung der Methode Response.RedirectPermanent auslegen und sich dann entspannt zurücklehnen können. Wie Abbildung 1 zeigt, ist die Methode RedirectPermanent für jede Klasse in einer ASP.NET MVC 2-Anwendung, die für das .NET Framework 4 kompiliert wurde, verfügbar.

Abb. 1: Die Methode RedirectPermanent in .NET-4-ASP.NET-MVC-Anwendungen
Abb. 1: Die Methode RedirectPermanent in .NET-4-ASP.NET-MVC-Anwendungen

Jedoch ist im ASP.NET MVC-Framework eine PermanentRedirectResult-Klasse, die die Methode RedirectPermanent vom Objekt Response verwendet, unmöglich direkt zu bekommen. In der Tat besitzt die Klasse Response in .NET 3.5 keine RedirectPermanent-Methode. Allerdings würde der in Listing 2 gezeigte Code sowohl für .NET-3.5- als auch .NET-4-ASP.NET-MVC-Anwendungen funktionieren.

public class PermanentRedirectResult : ActionResult
{
    public string Url { get; set; }
    public bool ShouldEndResponse { get; set; }

    public PermanentRedirectResult(string url)
    {
        if (String.IsNullOrEmpty(url))
            throw new ArgumentException("url");


        Url = url;
        ShouldEndResponse = false; 
    }

    public override void ExecuteResult(
                ControllerContext context)
    {
        // Preconditions
        if (context == null)
            throw new ArgumentNullException("context");
        if (context.IsChildAction)
            throw new InvalidOperationException();

        // Mark keys in the TempData dictionary for retention
        context.Controller.TempData.Keep();

        // Prepare the response
        string url = UrlHelper.GenerateContentUrl(
                Url, context.HttpContext);
        HttpResponseBase response = 
                context.HttpContext.Response;
        response.Clear();
        response.StatusCode = 301;
        response.AddHeader("Location", url);

        // Optionally end the request
        if (ShouldEndResponse)
            response.End(); 
    }
}  

Der Kern der Klasse befindet sich komplett in der ExecuteResult-Überschreibung, die neben anderen Dingen den Statuscode auf 301 setzt, den Location-Header hinzufügt und ihn auf den neuen Ziel-URL setzt.

Zusammenfassung

Der SEO-Experte verkörpert ein neues Berufsbild. Er hilft den Unternehmen (und den dazu gehörenden Sites), in der Liste der von Suchmaschinen zurückgegebenen Links immer weiter vorzurücken. Zu einer vollständigen SEO-Strategie gehören mehrere Aktionen, z. B. eine Neugestaltung von URLs, das Entfernen von nicht mehr funktionierenden und doppelten Links, Metatags und Schlüsselwörtern. Um den Einstieg zu erleichtern, hat Microsoft ein SEO-Toolkit veröffentlicht, das Ihnen – nachdem Sie es auf der Site installiert haben – Hinweise gibt, wo und wie sich etwas verbessern lässt. Permanente Umleitungen sind Teil der SEO-Anstrengung und ein Teil der Gesamtstrategie. In diesem Artikel habe ich gezeigt, wie Sie damit sowohl in ASP.NET als auch ASP.NET MVC umgehen.

Dino Esposito ist R&D Director bei Crionet, einer Firma, die sich auf webbasierte Lösungen für Sportereignisse in ganz Europa spezialisiert hat (http://www.e-tennis.net). Außerdem ist Dino der Autor von „Programming ASP.NET MVC“, Microsoft Press, 2010.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -