J’ai un domaine “http://www.abc.com”. J’ai déployé une application ASP.net MVC4 sur ce domaine. J’ai également configuré un itinéraire par défaut dans RouteConfig.cs, comme indiqué ci-dessous.
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "MyApp", action = "Home", id = UrlParameter.Optional } );
Le mappage ci-dessus garantit que toute personne tentant de visiter “http://www.abc.com” aura automatiquement la page “http://www.abc.com/MyApp/Home”
Tout fonctionne comme prévu, mais la barre d’adresse du navigateur indique “http://www.abc.com” au lieu de “http://www.abc.com/MyApp/Home”. Existe-t-il un moyen de forcer le navigateur à afficher l’URL complète, y compris le contrôleur et l’action?
Une option serait de définir votre route par défaut sur un nouveau contrôleur, appelé peut-être BaseController
avec une action Root
:
public class BaseController : Controller { public ActionResult Root() { return RedirectToAction("Home","MyApp"); } }
et modifiez votre RouteConfig
pour qu’il pointe sur celui des demandes racine:
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Base", action = "Root", id = UrlParameter.Optional } );
Vous devrez faire une sorte de réécriture d’URL. Le moyen le plus rapide consiste probablement à append un appel RewritePath à votre BeginRequest dans Global.asax. Dans votre cas, ce serait quelque chose comme ça:
void Application_BeginRequest(Object sender, EventArgs e) { ssortingng originalPath = HttpContext.Current.Request.Path.ToLower(); if (originalPath == "/") //Or whatever is equal to the blank path Context.RewritePath("/MyApp/Home"); }
Une amélioration consisterait à extraire dynamicment l’URL de la table de routage pour le remplacement. Ou vous pouvez utiliser Microsoft URL Rewrite , mais c’est plus compliqué OMI.
Supprimez simplement les parameters par défaut, il a été répondu ici:
Comment forcer MVC à router vers Home / Index au lieu de root?