Parametro di routing facoltativo con vincolo in ASP.NET MVC 2?

Se ho un percorso come questo:

routes.Add(new Route("{controller}/{page}", new RouteValueDictionary { { "page", UrlParameter.Optional } }, new RouteValueDictionary { { "page", @"[Pp]age\d+" } }, new MvcRouteHandler() )); 

Quindi il percorso non corrisponde quando manca {page}, tuttavia se rimuovo il vincolo che corrisponde. È un bug o una funzionalità?

È una caratteristica: come può il vincolo corrispondere se il parametro è opzionale? Potresti voler impostare il valore predefinito per “pagina” su “Pagina1” per risolvere il tuo problema o sostituire la tua espressione regolare con “([Pp] età \ d +)?” per non permettere che nulla corrisponda (non sono sicuro di questo e non posso testarlo).

Sto usando ^ $ | all’interno di un’espressione regolare, ad esempio: (^ $ | [Pp] età \ d +). Ho trovato questa domanda mentre cercavo una risposta a questo e ho pensato di aggiungere quello che ho trovato qui.

 routes.MapRoute( name: "News Archive", url: "News/{page}", defaults: new { controller = "news", action = "List", page= UrlParameter.Optional }, constraints: new { page= @"^$|[0-9][0-9]" });