2 Stimmen

Benutzerdefinierter VirtualPathProvider kann keine URLs bereitstellen, die mit einem Verzeichnis enden

Als Teil eines CMS habe ich einen benutzerdefinierten VirtualPathProvider erstellt, der dazu dient, eine einzelne Datei anstelle einer tatsächlichen Dateistruktur bereitzustellen. Ich habe ihn so eingerichtet, dass eine Datei, die tatsächlich auf dem Server vorhanden ist, auch bereitgestellt wird. Wenn die Datei nicht existiert, wird stattdessen der virtuelle Inhalt, der für diese Adresse gespeichert ist, bereitgestellt. Dies ist vergleichbar mit dem Konzept der Bereitstellung einer Website aus Dateien, die in einer Datenbank gespeichert sind, obwohl in diesem Fall der Inhalt in XML-Dateien auf dem Server gespeichert ist.

Diese Einrichtung funktioniert perfekt, wenn eine Anfrage an eine bestimmte Seite gestellt wird. Wenn ich z. B. nach "www.mysite.com/foobar.aspx" frage, wird der Inhalt, der für "foobar.aspx" gespeichert ist, angezeigt. Wenn ich außerdem nach "www.mysite.com/subdir/foobar.aspx" frage, wird der entsprechende Inhalt ebenfalls bereitgestellt.

Das Problem ist folgendes: Wenn ich nach etwas wie "www.mysite.com/foobar" frage, fangen die Dinge an zu scheitern. Wenn das Verzeichnis auf der Festplatte existiert (und keine konfigurierte Standardseite in IIS hat, wie index.aspx), erhalte ich einen Fehler "Directory Listing Denied". Wenn das Verzeichnis nicht existiert, erhalte ich einfach eine 404 - Resource Not Found.

Ich habe verschiedene Dinge ausprobiert, und bisher hat nichts von dem, was ich getan habe, etwas bewirkt. Es scheint, als ob der IIS einfach das Nichtvorhandensein eines Verzeichnisses (oder einer Standarddatei in einem bestehenden Verzeichnis) feststellt und seinen eigenen Fehlercode ausgibt, ohne meine Anwendung zu fragen, was mit der Anfrage geschehen soll. Wenn die Anwendung jemals gefragt würde, könnte ich das Problem lösen, aber so wie es aussieht, bin ich ziemlich ratlos. Weiß jemand, ob es eine Einstellung im IIS gibt, die dies verursacht?

Ich habe nach jeder Quelle gesucht, die ich zu diesem Thema finden kann, und bin leer ausgegangen. Ich weiß, dass dies möglich sein sollte, denn ich habe Anleitungen zur Bereitstellung von Inhalten aus Datenbanken und ZIP-Dateien gelesen. HILFE!

p.s., ich verwende IIS6 und .NET 3.5

2voto

Bryan Punkte 8670

Der IIS leitet eine Anfrage nur dann an den ASP.NET-Prozess weiter, wenn er für die jeweilige Erweiterung entsprechend konfiguriert ist. Die Standardeinstellung ist aspx, ascx usw. Mit anderen Worten: Wenn Sie eine .html-Datei anfordern, wird ASP.NET diese HTTP-Anforderung niemals sehen. Das Gleiche gilt für leere Erweiterungen.

Um dieses Verhalten zu ändern, fügen Sie dem ASP.NET-Prozess eine Platzhalterzuordnung hinzu. Laden Sie den IIS-Manager, gehen Sie zu den Eigenschaften Ihrer Website und sehen Sie sich die Registerkarte "Home Directory" an. Klicken Sie auf "Konfiguration". Dort sehen Sie die Zuordnungen von Erweiterungen zu Anwendungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X