Comment réparer une erreur 404 avec des routes dans ASP.NET MVC?
Je vais avoir un problème en essayant d'obtenir de routage de travailler avec ASP.NET MVC 3.0. J'ai les itinéraires suivants déclaré:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "RsvpForm", id = UrlParameter.Optional }
);
routes.MapRoute(
"TestRoute",
"{id}",
new { controller = "Product", action = "Index3", id = UrlParameter.Optional }
);
routes.MapRoute(
"TestRoute2",
"{action}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Lorsque je visite:
http://localhost
Le site fonctionne correctement, et il semble frappé Default
route.
Lorsque je visite:
http://localhost/1
J'obtiens une erreur 404:
Erreur de serveur dans l'Application'/'.
La ressource ne peut pas être trouvé.
Description: HTTP 404. La ressource que vous recherchez (ou une de ses dépendances) peut avoir été supprimée, que son nom ait changé ou est
temporairement indisponible. Veuillez consulter l'URL suivante et de faire
assurez-vous qu'il est correctement orthographié.URL demandée: /1
Ici sont les actions de ces routes correspondent à:
public ActionResult Index3(int? id)
{
Product myProduct = new Product
{
ProductID = 1,
Name = "Product 1 - Index 3",
Description = "A boat for one person",
Category = "Watersports",
Price = 275M
};
Product myProduct2 = new Product
{
ProductID = 2,
Name = "Product 2 - Index 3",
Description = "A boat for one person",
Category = "Watersports",
Price = 275M
};
ViewBag.ProcessingTime = DateTime.Now.ToShortTimeString();
if (id == 1)
return View("index", myProduct);
else
return View("index", myProduct2);
}
Comment puis-je structure mes itinéraires de sorte que tous trois méthodes d'action sont frapper correctement?
OriginalL'auteur Stiger | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
ASP.NET MVC de Routage évalue les routes du haut vers le bas. Donc, si deux itinéraires correspondent, pour la première, il frappe (le plus près du sommet de la
RegisterRoutes
méthode) aura préséance sur celle postérieure.Avec cela à l'esprit, vous devez faire deux choses à résoudre votre problème:
Quelle est la différence entre:
et
À l'analyseur, ils contiennent le même nombre de segments, et il n'y a pas de différenciation, donc il va frapper le premier itinéraire dans la liste qui correspond à.
Pour corriger cela, vous devez assurez-vous que les itinéraires les
ProductIds
prendre contraintes:Il y a d'autres problèmes avec votre installation, mais ce sont deux choses qui viennent à l'esprit dès le départ.
OriginalL'auteur
Vos itinéraires MapRoute par Défaut devrait être la dernière.
OriginalL'auteur
Pousser le plus générique route pour la dernière de la MapRoute chaîne d'appel.
Essayez ceci:
OriginalL'auteur
Déplacer votre route par Défaut à la fin, la route par Défaut doit être la dernière route à définir, car il agit comme un fourre-tout de l'itinéraire
OriginalL'auteur
Dans mon cas, la réponse, pour le même problème était une question d'avoir à inclure dans le projet" à la les contrôleurs et les vues à la place de l'inexactitude des règles de routage.
Lors de la mine ont été créés, ils ne sont pas automatiquement inclus pour une raison quelconque. Ce problème a été révélée après que j'ai fermé et rouvert la solution.
{+1 de la haine} attribué à Visual Studio pour ses fausses hyper-l'automatisation de l'envoi de me creuser à travers le Web.Les fichiers de configuration, en essayant de virer de bord sur les extensions, et même d'essayer (et à défaut) pour concocter un décent ErrorController.
OriginalL'auteur