2013-03-07 3 views
2

RouteASP.NET MVC 4 itinéraires ne fonctionne pas

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
    routes.MapRoute(
        name: "Contact", 
        url: "Contact", 
        defaults: new { controller = "Home", action = "Contact" } 
       ); 

mon contrôleur

public class HomeController : BaseController 
    { 
     public ActionResult Contact() 
     { 
      ViewBag.Message = "Your contact page."; 

      return View(); 
     } 
    } 

Mon Global.asax

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      AuthConfig.RegisterAuth(); 
     } 

Enfin mon url demande

http://localhost:1234/Contact/ 

Erreur sur le navigateur

La ressource ne peut pas être trouvée.

Description: HTTP 404. La ressource que vous recherchez (ou l'une de ses dépendances ) a pu être supprimée, son nom a été modifié ou est temporairement indisponible. Veuillez passer en revue l'URL suivante et faire sûr qu'il est orthographié correctement.

URL demandée:/Contact/

Informations sur la version: Microsoft .NET Framework Version: 4.0.30319; Version ASP.NET: 4.0.30319.18033

Qu'est-ce que je fais mal?

Solution:

itinéraire personnalisé doit prendre la priorité

routes.MapRoute(
         name: "Contact", 
         url: "Contact", 
         defaults: new { controller = "Home", action = "Contact" } 
        ); 
routes.MapRoute(
        name: "Default", 
        url: "{controller}/{action}/{id}", 
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
       ); 
+0

Où est votre itinéraire par défaut? – ssilas777

+0

Je l'ai, juste n'a pas inclus ici, pensé pas nécessaire. – HaBo

+1

Il est, route personnalisée devrait venir au-dessus de la route par défaut. – ssilas777

Répondre

13

Le cadre essaie toujours de correspondre à l'URL de la demande à un route dans l'ordre des itinéraires ajoutés au RouteCollection

Vous devriez donc mettre les routes personnalisées avant l'itinéraire par défaut,

//Custom route 
routes.MapRoute(
        name: "Contact", 
        url: "Contact", 
        defaults: new { controller = "Home", action = "Contact" } 
       ); 
//default route 
routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
+0

mais débogueur stucks dans la route personnalisée et ne va pas à la route par défaut au démarrage ainsi –

+0

@ZaveedAbbasi Je ne pense pas que cela puisse causer un problème, si vous trouvez des problèmes, il est préférable de soulever une question avec des échantillons de code . – ssilas777

+0

en fait j'ai eu à ..... "http://stackoverflow.com/questions/23217271/mvc-routing-with-multiple-parameters-in-not-working/23217364?noredirect=1#comment35517982_23217364" –

0
You can use: 

routes.MapRoute(
      name: "Default", 
      url: "{*p}", 
      defaults: new { controller = "Home", action = "Index", p = UrlParameter.Optional } 
     ); 
The asterisk indicates that it's a catch-all route. Keep in mind that these routes are extremely greedy, make sure that this stays below any specific routes. 

You could also add a route constraint to this route which can determine whether the page exists in the database or something. 
Questions connexes