2012-04-27 9 views
5

Ich erwarte vielleicht zu viel von ASP.NET, aber in Apache ist es trivial Urls zu umschreiben so etwas anfordernden wie: http://mysite/myfolder/mypage/niceurlparameter schafft es tatsächlich, statische Seite http://mysite/mypage.htmlWas ist falsch an dieser Global.asax Routing-Einstellung?

Wie ich in Global.asax tue das dienen?

Ich habe dies versucht:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/*", "~/myfolder/{page}.html"); 

aber es hält 404 zurückkehrt, wenn ich http://mysite/myfolder/mypage/niceurlparameter fordern.

Dies funktioniert jedoch:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}.html/*", "~/myfolder/{page}.html"); 

, damit ich mypage.html erhalten, wenn http://mysite/myfolder/mypage.html/niceurlparameter anfordern.

Ich möchte nur ".html" Teil in meinen URLs loswerden. Was vermisse ich?

UPDATE: Aus irgendeinem Grund wurde im ersten Fall der Platzhalter '*' nicht akzeptiert.

Wechsel zu:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/{whatever}", "~/myfolder/{page}.html"); 

erscheint die Aufforderung zur Route Seite HTML, aber dann bekomme ich den Fehler:

There is no build provider registered for the extension '.html'. 

Warum in der Welt würde es nur im ersten Fall arbeiten (mit html in URL), und nicht wenn html weggelassen wird?

+0

Welche Version von IIS verwenden Sie? Ich scheine mich zu erinnern, dass IIS 6 dies nicht erlauben wird, müssen Sie eine Wildcard-Mapping hinzufügen. –

+1

Siehe diese Frage für eine mögliche Lösung: http://stackoverflow.com/q/9918066/25727 – Jan

+0

IIS ist v7.5. Der vorgeschlagene Link half. Danke – tishma

Antwort

3

There is no build provider registered for the extension '.html'

Sie erhalten diesen Fehler, da statische HTML-Dateien direkt vom IIS verarbeitet werden sollen. In Ihrem Fall versucht das ASP.NET MVC-Framework jedoch, die Datei vom Typ .html zu verarbeiten, was nicht möglich ist.

Wenn Sie also denken, dass dies das ist, was Sie tun müssen, müssen Sie einen neuen Anbieter erstellen und sich in der Datei web.config registrieren. Blick auf diese

Custom file extensions for ASP.NET - help needed!

Sie einfach Ihre statische HTML-Content-Dateien .aspx ändern könnte. Ein einfaches Kopieren und Einfügen würde den Job erledigen und es sollte gut funktionieren. Es wird wissen, wie mit dem Dateityp umzugehen ist.

+1

Ich akzeptiere dies, da es tatsächlich das Problem behebt. Allerdings würde ich nie etwas Brauchbares schreiben, das es einem Web-Server erlauben würde, statische Dateien (!?!) Zu liefern. URL-Neuschreiben ist ein viel besserer Pfad zu Nehmen Sie, wenn Sie statische Dateiumleitung wünschen.IIS 7.5 und URL rewrite 2 Modul sind der Weg zu gehen. – tishma

Verwandte Themen