HttpHandler in ASP.NET MVC 👍 👎

Manchmal kann es sinnvoll sein, bestimmte Aufrufe einer Webanwendung abseits der "normalen" Vorgehensweise zu behandeln. Konkret soll es darum gehen, Aufrufe mit der Dateiendung ".css" abzufangen, um in den statischen Dateien Platzhalter dynamisch zu ersetzen, was mit CSS selbst nicht möglich wäre. Unser Stylesheet:
Site.css
01020304
body {    background-color: #{backgroundColor};    color: #{color};}
Die Umsetzung ist sehr einfach, wir müssen dazu lediglich eine Klasse erstellen, welche die Schnittstelle IHttpHandler und natürlich auch das gewünschte Verhalten implementiert – der Fantasie sind hier kaum Grenzen gesetzt. Wir belassen es der Einfachheit wegen bei einem einfachen (und nicht sehr effizienten) Beispiel:
HttpHandler implementieren
010203040506070809101112131415161718192021222324
public class HttpHandler : IHttpHandler {    public bool IsReusable {        get {            return true;        }    }
public void ProcessRequest(HttpContext context) { // Ersetzungsdaten (in der Praxis evtl. aus Datenbank) Dictionary<string, string> replacementData = new Dictionary<string, string>() { {"backgroundColor", "000"}, {"color", "fff"} };
// Platzhalter im Stylesheet mit Ersetzungsdaten austauschen StringBuilder css = new StringBuilder(File.ReadAllText("Site.css"));
foreach(KeyValuePair<string, string> replacement in replacementData) { css.Replace(String.Format("{{0}}", replacement.Key), replacement.Value); }
context.Response.Write(css.ToString()); }}
Abschließend passen wir die Konfiguration (→ Web.config) an, um unsere eigene Behandlung zu registrieren:
Konfiguration erweitern
01020304050607
<configuration>  <system.webServer>    <handlers>      <add name="DynamicStylesheet" path="*.css" type="HttpHandler" verb="GET" />    </handlers>  </system.webServer></configuration>
Weiterführende Informationen zum Thema finden sich im MSDN.

Ein bekanntes – und weitaus mächtigeres – Projekt, welches von dieser Möglichkeit Gebrauch macht, ist dotless, eine Implementierung der Stylesheet-Skriptsprache LESS für .NET. Diese ermöglicht u. a. eine übersichtlichere Verschachtelung, Variablen und Funktionen in Stylesheets, wobei der HttpHandler dafür sorgt, dass die vom Browser angeforderten .less-Dateien serverseitig in "reines" CSS umgewandelt und ausgeliefert werden.

Die Verwendung der MVC-Erweiterung für ASP.NET ist für dieses Vorgehen übrigens nicht unbedingt erforderlich, ich arbeite jedoch nahezu ausschließlich mit dieser.


Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche