Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Ruslan Yakushev
In dieser exemplarischen Vorgehensweise erfahren Sie, wie Sie einen Rewrite-Anbieter für das URL-Rewrite-Modul 2.0 entwickeln. Sie werden einen ReplaceProvider erstellen, der alle Vorkommen eines bestimmten Zeichens in der URL durch ein anderes Zeichen ersetzt. Diese Art von Logik lässt sich nur schwer und manchmal gar nicht mit regulären Ausdrücken realisieren. Daher ist es notwendig, einen benutzerdefinierten Rewrite-Anbieter zu erstellen.
Erstellen eines Visual Studio-Projekts
Führen Sie die folgenden Schritte aus, um ein Visual Studio-Projekt für einen Rewrite-Anbieter zu erstellen:
Öffnen Sie Microsoft Visual Studio 2008 oder Microsoft Visual C# 2008 Express Edition.
Wählen Sie im Menü „Datei“ die Option „Neues Projekt...“ aus.
Wählen Sie im Dialogfeld „Neues Projekt“ die Projektvorlage „Klassenbibliothek“ aus, und nennen Sie das Projekt ReplaceProvider.

Entfernen Sie die Datei Class1.cs, die standardmäßig hinzugefügt wird (da Sie diese Datei nicht verwenden werden), indem Sie im Projektmappen-Explorer im Kontextmenü die Option Löschen verwenden.
Wählen Sie „Verweise hinzufügen...“ aus dem „Projekt“-Menü und fügen Sie Verweise zu Microsoft.Web.Iis.Rewrite.dll in
%ProgramFiles%\Reference Assemblies\Microsoft\IIShinzu.Rewrite-Anbieter müssen im .NET Global Assembly Cache (GAC) platziert werden, damit sie für das URL-Rewrite-Modul sichtbar sind. Dazu muss die Anbieterassembly-DLL einen starken Namen erhalten (signiert werden). Um die Assembly zu signieren, wählen Sie die Option „ReplaceProvider-Eigenschaften...“ aus dem Menü „Projekt“ aus.
Aktivieren Sie auf der Registerkarte „Signieren“ das Kontrollkästchen „Assembly signieren“.
Wählen Sie im Kombinationsfeld die Option <Neu...> aus, um einen neuen Schlüssel zu erstellen. Geben Sie im Dialogfeld „Schlüssel mit starkem Namen erstellen“ den Namen „DemoKey.snk“ ein und deaktivieren Sie das Kontrollkästchen „Meine Schlüsseldatei mit einem Kennwort schützen“. Klicken Sie auf OK.

Die Registerkarte „Signieren“ sollte wie folgt aussehen:

Wählen Sie die Registerkarte „Buildereignisse“ aus, und fügen Sie die folgende Befehlszeile für das „Postbuildereignis“ hinzu:
CALL
%VS90COMNTOOLS%\vsvars32.bat> NULL
gacutil.exe /if "$(TargetPath)"Hinweis: Wenn Sie Visual Studio 2010 verwenden, ersetzen Sie %VS90COMNTOOLS% durch %VS100COMNTOOLS%.
Implementieren der Anbieterschnittstellen
Um einen Rewrite-Anbieter zu implementieren, führen Sie die folgenden Schritte aus:
- Wählen Sie im „Projekt“-Menü die Option „Klasse hinzufügen...“ aus, und geben Sie der Klasse den Namen ReplaceProvider. Dadurch wird dem Projekt eine neue Datei ReplaceProvider.cs hinzugefügt.
- Ändern Sie den Code so, dass er wie folgt aussieht:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Iis.Rewrite;
public class ReplaceProvider: IRewriteProvider, IProviderDescriptor
{
char oldChar, newChar;
#region IRewriteProvider Members
public void Initialize(IDictionary<string, string> settings, IRewriteContext rewriteContext)
{
string oldCharString, newCharString;
if (!settings.TryGetValue("OldChar", out oldCharString) || string.IsNullOrEmpty(oldCharString))
throw new ArgumentException("OldChar provider setting is required and cannot be empty");
if (!settings.TryGetValue("NewChar", out newCharString) || string.IsNullOrEmpty(newCharString))
throw new ArgumentException("NewChar provider setting is required and cannot be empty");
if (!string.IsNullOrEmpty(oldCharString))
oldChar = oldCharString.Trim()[0];
else
throw new ArgumentException("OldChar parameter cannot be empty");
if (!string.IsNullOrEmpty(newCharString))
newChar = newCharString.Trim()[0];
else
throw new ArgumentException("NewChar parameter cannot be empty");
}
public string Rewrite(string value)
{
return value.Replace(oldChar, newChar);
}
#endregion
#region IProviderDescriptor Members
public IEnumerable<SettingDescriptor> GetSettings()
{
yield return new SettingDescriptor("OldChar", "Old Character");
yield return new SettingDescriptor("NewChar", "New Character");
}
#endregion
}
Der obige Code implementiert zwei Schnittstellen:
IRewriteProvider – Die Hauptschnittstelle, die implementiert werden muss. Sie wird verwendet, um den Anbieter durch Übergabe der Konfigurationseinstellungen zu initialisieren. Außerdem wird sie verwendet, um den Anbieter auszuführen.
IProviderDescriptor – Dies ist eine optionale Schnittstelle, mit der Sie IIS Manager über die Namen und Beschreibungen der vom Provider verwendeten Konfigurationseinstellungen informieren können.
Registrieren und Konfigurieren des Anbieters
Nachdem der Anbieter erfolgreich integriert und in das GAC eingefügt wurde, muss er beim URL-Rewrite-Modul von IIS registriert werden. So wird der Anbieter registriert:
- Öffnen Sie den IIS-Manager, und wählen Sie das URL-Rewrite-Feature aus.
- Klicken Sie auf die Aktion „Anbieter anzeigen“:

- Klicken Sie auf der Seite „Anbieter“ auf die Aktion „Anbieter hinzufügen...“, geben Sie den Namen des Anbieters als „ReplaceProvider“ ein, und wählen Sie den Anbietertyp aus der Dropdownliste „Verwalteter Typ:“ aus.

- Klicken Sie zum Speichern der Änderungen auf OK.
- Klicken Sie auf die Aktion „Anbietereinstellung hinzufügen...“. In der Dropdownliste „Name:“ werden die Einstellungen angezeigt, die von der Methode IProviderDescriptor.GetSettings() zurückgegeben wurden. Wählen Sie „Altes Zeichen“ aus, und geben Sie „_“ als Wert ein.

- Klicken Sie auf „OK“, um die Einstellung zu speichern.
- Wiederholen Sie die Schritte 5 und 6, wählen Sie aber jetzt „Neues Zeichen“ aus, und geben Sie „-“ als Wert an. Das bedeutet, dass der Anbieter alle Vorkommen von „_“ durch „-“ in der Eingabezeichenfolge ersetzen wird.
Damit ist die Registrierung und Konfiguration des Rewrite-Anbieters abgeschlossen. Infolgedessen enthält die Datei „web.config“ für die Standardwebsite den folgenden XML-Code innerhalb des Abschnitts <rewrite>:
<rewrite>
<providers>
<provider name="ReplaceProvider" type="ReplaceProvider, ReplaceProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=157df8edcf6cf889">
<settings>
<add key="OldChar" value="_" />
<add key="NewChar" value="-" />
</settings>
</provider>
</providers>
</rewrite>
Verwenden des Rewrite-Anbieters
Nachdem der Rewrite-Anbieter registriert wurde, kann er in den Eingangs- und Ausgangsregeln verwendet werden. Um den Anbieter zu testen, erstellen Sie eine Regel, die alle Anforderungen für URLs, die das Symbol „_“ enthalten, auf die URL umleitet, bei der dieses Zeichen durch „-“ ersetzt wurde. Beispielsweise wird eine Anforderung an eine URL wie diese http://localhost/some_blog_post/ umgeleitet an http://localhost/some-blog-post/.
Um eine Regel zu erstellen, die diesen Rewrite-Anbieter verwendet, fügen Sie den folgenden XML-Code innerhalb des <rewrite>-Elements in der Datei „web.config“ hinzu:
<rules>
<rule name="ReplaceProviderTest" stopProcessing="true">
<match url="_" />
<action type="Redirect" url="{ReplaceProvider:{URL}}" />
</rule>
</rules>
Öffnen Sie einen Webbrowser, und senden Sie eine Anforderung an http://localhost/some_blog_post/.. Beachten Sie, dass der Browser aufgrund der von Ihnen hinzugefügten Regel auf http://localhost/some-blog-post/ umgeleitet wurde. Der Webserver gibt einen HTTP 404-Fehler für die umgeleitete URL zurück, da es keine solche Datei oder kein solches Verzeichnis auf dem Server gibt, aber das ist für die Zwecke dieser exemplarischen Vorgehensweise nicht relevant. Der wichtige Teil ist, dass der Webserver eine Umleitungsantwort basierend auf der Regel ausgegeben hat, die den benutzerdefinierten Rewrite-Anbieter verwendet hat.