2012-04-27 20 views
5

I może spodziewałem się zbyt wiele od ASP.NET, ale w Apache to banalne przepisać adresy URL, więc zainteresowanie coś takiego: http://mysite/myfolder/mypage/niceurlparameter faktycznie zarządza służyć strona statyczna http://mysite/mypage.htmlCo jest nie tak z tym routingiem Global.asax?

Jak to zrobić w Global.asax?

Próbowałem to:

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

ale utrzymuje powrocie 404 kiedy zażądać http://mysite/myfolder/mypage/niceurlparameter.

Jednak to działa:

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

więc rozumiem mojastrona.html przy żądaniu http://mysite/myfolder/mypage.html/niceurlparameter.

Po prostu chcę pozbyć się części ".html" w moich adresach URL. czego mi brakuje?

AKTUALIZACJA: Z jakiegoś powodu w poprzednim przypadku symbol wieloznaczny "*" nie został zaakceptowany.

Zmiana na: wydaje się trasa wniosek do strony HTML

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

, ale potem pojawia się błąd:

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

Dlaczego na świecie jest po prostu pracować w pierwszym przypadku (z html w adresie URL), a nie kiedy HTML jest pominięty?

+0

Jaką wersję IIS używasz? Wydaje się, że pamiętam, że IIS 6 nie pozwoli na to po wyjęciu z pudełka, musisz dodać mapowanie wieloznaczne. –

+1

Zobacz to pytanie, aby znaleźć możliwe rozwiązanie: http://stackoverflow.com/q/9918066/25727 – Jan

+0

IIS jest v7.5. Sugerowany link pomógł. Dzięki – tishma

Odpowiedz

3

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

Otrzymujesz ten błąd, ponieważ statyczne pliki HTML powinny być obsługiwane przez IIS bezpośrednio. Jednak w twoim przypadku środowisko ASP.NET MVC próbuje obsłużyć plik typu .html, którego nie może.

Więc jeśli uważasz, że to jest to, co musisz zrobić, będziesz musiał dokonać nowego dostawcy i zarejestrować się w pliku web.config. spojrzeć na ten

Custom file extensions for ASP.NET - help needed!

Można łatwo zmienić statyczną zawartość HTML na pliki aspx. Prosta kopia i wklejanie wykonałyby zadanie i powinno działać poprawnie. Będzie wiedział, jak obsługiwać ten typ pliku.

+1

akceptuję to, ponieważ to faktycznie rozwiązuje problem, ale nigdy nie napiszę nic niestandardowego, co ostatecznie pozwoliłoby serwerowi sieciowemu wyświetlać pliki statyczne (!?!) Przepisywanie adresów URL to lepsza droga do take, jeśli chcesz przekierować pliki statyczne, to jest IIS 7.5 i moduł 2 do zmiany adresu URL. – tishma