2017-08-28 1 views
0

Je travaille dans MVC 5 et j'ai repris un projet. Lorsque je me connecte sur la page d'accueil « mydomain.com » il arrive avec une erreur: «Erreur de serveur dans application «/» La ressource ne peut être trouvée. Description: HTTP 404. URL demandée:/»La page d'accueil MVC ne fonctionne pas, les fichiers RouteConfig et Global sont corrects.

Si je tape mydomain.com/home/index, la page d'accueil apparaît comme il se doit. Je pense que c'est un problème de RouteConfig.cs, mais tout me semble plutôt par défaut.

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

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

      routes.MapRoute(
       name: "Glossary2", 
       url: "{controller}/{action}/{letter}", 
       defaults: new { controller = "Teacher", action = "Glossary2", letter = UrlParameter.Optional } 
       ); 

      /* Will need to finish this later. 
      * When the contact us form is submitted, it should redirect to Home/Contact/{state} 
      * where {state} can be either 'Success' or 'Error', which will display 
      * an alert component in the view based on the provided {state}. 
      */ 
      routes.MapRoute(
       name: "ContactSuccess", 
       url: "{controller}/{action}/{submissionStatus}", 
       defaults: new { controller = "Home", action = "Contact", submissionStatus = UrlParameter.Optional } 
       ); 

      /* Will need to finish this later. 
      * When the contact us form is displayed, it should check to see if a reason for contacting 
      * us is already set. If it is, it should automatically select the appropriate reason on the 
      * dropdown menu. 
      */ 
      routes.MapRoute(
       name: "ContactReason", 
       url: "{controller}/{action}/{reason}", 
       defaults: new { controller = "Home", action = "Contact", reason = UrlParameter.Optional } 
       ); 
     } 
    } 
} 

Je ne suis pas sûr de ce que l'CustomeViewEngine fait et n'ont pas vraiment foiré avec elle encore. J'ai également inspecté le fichier Global.asax.cs et il semble assez standard. Y at-il un moyen de déterminer pourquoi le nom de domaine n'est pas routé vers la page d'accueil/l'index? Si je mets le mappage par défaut en bas du fichier RouteConfig, il veut automatiquement rediriger vers la page de connexion. Encore une fois, je ne comprends pas vraiment pourquoi cela agirait de cette façon.

+1

Toutes ces routes sont en conflit les unes avec les autres. Tous ont le même modèle de route. Vous devez différencier ces routes plus – Nkosi

Répondre

0

Je pense que vos définitions d'itinéraires ne sont pas dans le bon ordre, l'ordre d'acheminement est évalué de haut en bas (the most specific path resolved first).

Par conséquent, la route par défaut devrait être lieu que le dernier itinéraire défini:

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

    // custom path at the top (or top-most depending on priority) 
    routes.MapRoute(
     name: "Example", 
     url: "Example/{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

    // default path at the bottom-most 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

De plus, toutes les URL définies dans toutes les routes de l'échantillon sont en même modèle (en utilisant {controller}/{action}/{parameter}), par conséquent potentiellement un conflit entre eux. Vous pouvez utiliser des chaînes simples pour différencier les modèles d'itinéraires similaires:

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

    routes.MapRoute(
     name: "Glossary2", 
     url: "Teacher/{action}/{letter}", 
     defaults: new { controller = "Teacher", action = "Glossary2", letter = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "ContactSuccess", 
     url: "{controller}/{action}/SubmissionStatus/{submissionStatus}", 
     defaults: new { controller = "Home", action = "Contact", submissionStatus = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "ContactReason", 
     url: "{controller}/{action}/Reason/{reason}", 
     defaults: new { controller = "Home", action = "Contact", reason = UrlParameter.Optional } 
    ); 

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

Remarque: Utilisez RouteDebugger pour savoir quels itinéraires gérés par RouteConfig lors de l'accès des itinéraires spécifiques.

+0

J'ai commenté toutes les autres routes pour le moment et cela fonctionne comme prévu. Maintenant pour essayer de comprendre pourquoi ces autres routes ont été ajoutées. Je vous remercie. – Zach