2009-04-16 5 views
2

Comment créer un gestionnaire de routage personnalisé dans ASP.NET MVC?ASP.NET MVC, manipulation de la structure d'URL

+0

ce sont vous essayez d'atteindre? Vous devez être un peu plus spécifique –

+0

Salut Andrew, j'ai réécrit ma question et j'espère que c'est plus spécifique. Bravo pour le commentaire. Jamie –

Répondre

6

ASP.NET MVC, il est facile de créer un gestionnaire d'itinéraire personnalisé dans le Global.asax.cs:

routes.MapRoute(
     "Default", 
     "{controller}.aspx/{action}/{id}", 
     new { action = "Index", id = "" } 
    ).RouteHandler = new SubDomainMvcRouteHandler(); 

Cela entraînera toutes les demandes traitées par les RouteHandler personnalisé spécifié. Pour ce gestionnaire particulier:

public class SubDomainMvcRouteHandler : MvcRouteHandler 
    { 
     protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext) 
     { 
      return new SubDomainMvcHandler(requestContext); 
     } 
    } 

Vous pouvez faire ce que vous voulez, dans ce cas, le SubDomainMvcHandler saisit le sous-domaine de l'URL et le transmet par le contrôleur comme une propriété:

public class SubDomainMvcHandler : MvcHandler 
    { 
     public SubDomainMvcHandler(RequestContext requestContext) : base(requestContext) 
     { 
     } 

     protected override void ProcessRequest(HttpContextBase httpContext) 
     { 
      // Identify the subdomain and add it to the route data as the account name 
      string[] hostNameParts = httpContext.Request.Url.Host.Split('.'); 

      if (hostNameParts.Length == 3 && hostNameParts[0] != "www") 
      { 
       RequestContext.RouteData.Values.Add("accountName", hostNameParts[0]); 
      } 

      base.ProcessRequest(httpContext); 
     } 
    } 
+0

Parfait. Merci Jason! Par intérêt, quelle est la manière générale d'aller de l'avant pour remercier pour une solution sur SO? Commentaire ou d'une autre manière? –

+0

Je pense que le «merci» est suffisant dans une communauté évaluée par des pairs comme ceci ;-) – Jason

+0

Alors il viendra comme une propriété dans les méthodes de contrôleur? –

Questions connexes