Mit Visual Studio 2012.2 (also Version 3) kommt ein Aufsatz mit dem Namen FriendlyUrls. In der neuen Manier der Bausteine, kann sich das man sich das auch in sein ASP.NET Projekt per Nuget nachinstallieren (Microsoft.AspNet.FriendlyUrls). Dabei gibt es sogar zwei Paket eines mit .core und eines Ohne.
Microsoft verfolgt hier zwei Ziele. Zum einem sollen aus aspx Websites die Erweiterung aspx verschwinden um schönere URLs zu haben. Dazu gehört auch das die Querystrings entfallen so wie man es aus MVC her kennt. Also Webform1/1 entspricht webform1.aspx?ID=1. Dazu sollte das core Paket reichen.
Der Zweite Teil beschäftigt sich mit mobilen Websites. So kann eine alternative ASPX Seite für Phone User angelegt werden. Sicher etwas mit Zukunft.
Zu den Problemen. Das Friendlyurls Paket erzeugt auch in VB.net Projekten C# Code. Entsprechend muss man diese Dateien löschen und in die global.asax.vb eingreifen.
1: Imports Microsoft.AspNet.FriendlyUrls
2: Imports System.Web.Routing
3:
4: Public Class Global_asax
5: Inherits System.Web.HttpApplication
6:
7: Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
8: ' Fires when the application is started
9: Dim fu = New FriendlyUrlSettings()
10: fu.ResolverCachingMode = ResolverCachingMode.Dynamic
11: fu.AutoRedirectMode = RedirectMode.Permanent
12:
13: RouteTable.Routes.EnableFriendlyUrls(fu)
14: End Sub
Wenn dann der Request auf eine ASPX Seite ausgeführt wird antwortet der Webserver mit 301 und liefert die Ersatzseite mit.
Für meinen selbstgebauten Rest Service wollte ich das auch ausprobieren. Schliesslich ist das .ASPX das einzige was mich noch verrät. Allerdings spiest sich das Routing mit dem MVC Template. Auch irgendwie logisch. Also muss man das MVC Routing in der RouteConfig deaktivieren oder umleiten an eine spezielle URL (hier MVC).
1: Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
2: routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
3:
4: routes.MapRoute( _
5: name:="Default", _
6: url:="mvc/{controller}/{action}/{id}", _
7: defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
8: )
9:
10: Dim fu = New FriendlyUrlSettings()
11: fu.ResolverCachingMode = ResolverCachingMode.Dynamic
12: fu.AutoRedirectMode = RedirectMode.Permanent
13:
14: routes.EnableFriendlyUrls(fu)
Mehr Info zu den Web Tools