2010-11-19 5 views
0

Ich habe ein HTTP-Modul, das in IIS 7 ausgeführt wird und verschiedene URL-Neuschreibdienste bereitstellt.IIS7 HTTPModule kann den Pfad zu einer MVC-Unteranwendung nicht neu schreiben

Zum Beispiel:

public void Init(HttpApplication context) 
{ 
    ... 
    HttpContext.Current.RewritePath(landingPage.NewPath, 
           string.Empty, 
           landingPage.NewQueryString + 
           ((landingPage.NewQueryString == string.Empty) ? "" : "&") + 
           queryString); 
    ... 
} 

Ich habe eine Unter Anwendung mit einem eigenen App-Pool in MVC geschrieben: http://www.SomeSiteWithURLrewrite.com/SubMVCApplication/

Dieses Modul große Werke außer bei MVC-Anwendungen, die als Unteranwendungen erstellt wurden.

Wenn ich eine HTTP-Anforderung machen, die neu geschrieben werden: http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten

Ich erhalte einen HTTP-Fehler 404.0 - nicht gefunden

Die 404-Fehlerseite zeigt, dass ein Aufruf von "http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten" in den physischen Pfad "C: {RootDirectory} \" geschrieben wurde. SubMVCApplication \ "mit dem Handler von" StaticFile ".

Ich bin mir nicht sicher, warum die Pipline "HttpContext.Current.RewritePath" nicht als eine MVC-Anfrage erkennt. Liegt es daran, dass die MVC-App in einer eigenen Anwendung ist?

Wie kann ich nennen RewritePath (oder so ähnlich) und IIS machen eine ASP.Net MVC page.in Unter Anwendung

Antwort

2

Wenn Sie die Anwendung Grenzen überqueren müssen Sie eine Response.Redirect, welche Themen tun nur Befehl, ein Client-basierter HTTP 301 Redirect Befehl

RewritePath ein Server und benötigt Zugriff auf die Routing-Tabellen usw. Somit wird nur die aktuelle Anwendung Grenze

Es gibt keine einfache Antwort, die nicht machen, eine Seite Proxy Jede Web-Anwendung durchläuft Inhalte, aber dies wäre sehr ineffizient

z.B. server.com/a/x readwriting to server.com/b/x, Code müsste die Anwendungsgrenze changem erkennen und würde stattdessen auf einer Weiterleitung eine HTTPRequest ausgeben, um den Inhalt von server.com/b/x zu erhalten diesen Inhalt an den Client zurückgeben? Ressourcenpfade usw. würde ein großes Problem werden, so wahrscheinlich keine gute Idee

0

stimme ich überhaupt nicht mit TFD's answer. Alles hängt von Algorithmus ab, den Sie implementieren möchten.

Here Sie können eine ausführliche Beschreibung über Routing und URL Neuschreiben finden. Was mich aus dem Grund, Baum Basis-URL-Struktur zu implementieren, ist eine bessere URL vor Routing-Rewriting zu verwenden, um

URL-Transformation: my.site.com/page1/page2/page3/faq.aspx
zu: my.site.com/content/faq.aspx?parent=page3/page2/page1

wo content der Controller-Name ist und faq ist ein eindeutige Kennung.

Daten dafür können aus Datenbank oder Sitemap-Datei entnommen werden.