2010-02-19 4 views
1

je reçois une erreur 404 lorsque je navigue à l'URL suivante en utilisant l'itinéraire ci-dessous:ASP.Net MVC 2 RC2: retourne la route personnalisée 404 lorsque tous les paramètres facultatifs sont nuls

http://localhost:53999/properties/

Cependant, tous les suivants sont correctement acheminés vers la liste d'actions dans mon contrôleur:

http://localhost:53999/properties/usa/new-york/manhattan/12

http://localhost:53999/properties/usa/new-york/manhattan

http://localhost:53999/properties/usa/new-york

http://localhost:53999/properties/usa

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    //properties 
    routes.MapRoute(
     "Properties", 
     "Properties/{country}/{state}/{city}/{id}", 
     new 
     { 
      controller = "Properties", 
      action = "List", 
      country = UrlParameter.Optional, 
      state = UrlParameter.Optional, 
      city = UrlParameter.Optional, 
      id = UrlParameter.Optional 
     } 
    ); 

    //default 
    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 
} 

En PropertiesController.cs:

public ActionResult List(string country, string state, string city, string id) 
{ 
    return View(); 
} 

Quelqu'un sait ce que je suis absent? On dirait qu'il devrait aller à l'action par défaut, mais il ne signifie évidemment pas ...

Répondre

0

Brad Wilson a répondu sur ce post: http://forums.asp.net/p/1527697/3690295.aspx#3690295

« Non, le problème est que vous avez un dossier Propriétés sur votre disque, il est donc l'envoi par le répartiteur standard (non MVC), et 404ing ensuite parce qu'il Impossible de trouver un document par défaut. "

0

Au lieu de passer

(string)null 

Essayez de passer

UrlParameter.Optional 

comme spécifié dans Phil Haacks poste here . Je ne sais pas si cela va résoudre le problème car je ne suis pas actuellement en mesure de le tester.

+0

Ce n'est pas disponible dans MVC 1.0 cependant. –

+0

Veuillez noter que UrlParameter.Optional n'est disponible que dans MVC 2 RC 2, qui vient de sortir début février. – Brettski

+1

@ çağdaş: L'OP dit spécifiquement MVC 2. –

2

Vous pouvez également essayer ce qui suit (puisque vous utilisez MVC 1.0).

Ajouter un itinéraire ci-dessus l'itinéraire actuel:

routes.MapRoute(
    "Properties", "Properties", new { controller = "Properties", action = "List"} 
); 

Et ajouter une méthode ActionResult List() surchargée de votre contrôleur:

public ActionResult List() 
{ 
    return View(); 
} 
+0

Moi aussi j'ai pensé qu'il utilisait MVC 1.0 :) Mais il dit MVC 2 dans le titre. C'est bizarre, nous l'avons tous les deux manqué. –

+0

Je l'ai essayé exactement comme vous l'avez, mais VS se plaignait que j'avais déjà un itinéraire nommé "Propriétés", donc je l'ai changé en "DefaultProperties" pour lui donner quelque chose de différent. Malheureusement, je reçois toujours un 404 quand je vais simplement à localhost: 53999/propriétés. Cependant, une fois que j'ai une valeur pour l'un des paramètres optionnels, il est routé vers l'action sans problème. P.S. Oui, j'utilise MVC 2 RC2 .. –

1

Avez-vous essayé Route Debugger de Phil Haack? Cela peut vous aider à déterminer ce qui se passe.

+0

Merci, oui je l'ai juste essayé et il semble reconnaître le bon contrôleur et l'action, mais il jette toujours un 404. Il peut être un bug, parce que je pouvais réparer en changeant le mot clé d'itinéraire principal de "Propriétés" à toute autre chose. Il se pourrait que le mot-clé soit réservé ou quelque chose ... pas dunno. J'ai testé le tout avec un mot clé de routage différent et cela fonctionne très bien. Bizarre, mais ça marche maintenant. :) –

Questions connexes