Pourquoi ne pas le travail par défaut d'itinéraire à l'aide Html.ActionLink dans ce cas?
-
26-09-2019 - |
Question
J'ai une question assez particulière avec le routage.
Pour revenir à l'acheminement après ne pas avoir à vous soucier de configuration pour un an, je me sers de la route par défaut et la route pour les ressources ignorer:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
// Route name
"{controller}/{action}/{id}",
// URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
});
J'ai un RulesController
avec une action pour Index
et Lorem
et un Index.aspx
, Lorem.aspx
Vues> Répertoire Règles.
Je dispose d'un ActionLink visant à Règles / Index sur la page maseter:
<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li>
Le lien est rendu comme http://localhost:12345/Rules/
et reçois un 404.
Quand je tape Index
dans l'URL des voies d'application à l'action.
Quand je change l'action de la route par défaut de "Index"
à "Lorem"
, le lien d'action est rendu comme http://localhost:12345/Rules/Index
ajoutant le Index
comme il est plus sur la route par défaut et les voies d'application à l'action Index correctement.
J'ai utilisé Debugger Phil Haack routage , mais entrant dans le http://localhost:12345/Rules/
url est à l'origine d'une 404 en utilisant aussi.
Je pense que je l'ai couvert toutes les erreurs de débutant, des questions pertinentes et de SO RTFMs de base.
Je suppose que « les règles » n'est pas une sorte de mot réservé dans le routage. Autre que la mise à jour des routes et les debuugging, que puis-je regarder?
La solution
Assurez-vous qu'il n'y a pas un dossier appelé « règles » dans le même répertoire que votre site Web. Dans sa configuration par défaut, les routes ASP.NET MVC respecteront les chemins physiques avant les définitions de l'itinéraire. S'il y a un itinéraire défini qui correspond au chemin d'un dossier physique dans le site Web, le moteur de routage sera complètement contournée.
Vous pouvez désactiver le routage des chemins physiques en changeant la propriété RouteTable.Routes.RouteExistingFiles
à false
, mais si vous le faites et votre application a des chemins vers des ressources physiques (comme les images, scripts, feuilles de style, etc.), vous devrez tenir compte de ces chemins avec les définitions correspondant à IgnoreRoute ().
Par exemple:. RouteTable.Routes.IgnoreRoute("content/{*pathInfo}");