2010-04-24 3 views
12

Y a-t-il un moyen simple d'utiliser le routage ASP.NET 4.0 avec Web Forms pour produire une route qui servira de type générique? Il me semble que dans WebForms, vous devez spécifier une route pour chaque page - je suis à la recherche d'une route générique qui peut être utilisée là où rien de spécifique n'est requis, peut-être en mappant directement le chemin vers le chemin. ..asp.net 4.0 routage de formulaires web - chemin par défaut/wildcard

http://somedomain.com/folder1/folder2/page tracerait éventuellement à FOLDER1/dossier2/Page.aspx

Toutes les suggestions?

Merci

Répondre

22

Vous pouvez faire correspondre tous les itinéraires restants comme celui-ci:

routes.MapPageRoute("defaultRoute", "{*value}", "~/Missing.aspx"); 

Dans ce cas, nous savons que tous les itinéraires, et veulent envoyer quoi que ce soit d'autre à un « manque »/404 page. Assurez-vous simplement de mettre cela comme dernière route, car il s'agit d'un joker et va tout attraper.

Sinon, vous pouvez enregistrer un itinéraire de la même manière, mais ne interne cartographie à une page, comme ceci:

routes.Add(new Route("{*value}", new DefaultRouteHandler())); 

Cette classe de gestionnaire ferait le mappage générique, quelque chose comme ceci:

public class DefaultRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
    //Url mapping however you want here: 
    var pageUrl = requestContext.RouteData.Route.Url + ".aspx"; 

    var page = BuildManager.CreateInstanceFromVirtualPath(pageUrl, typeof(Page)) 
       as IHttpHandler; 
    if (page != null) 
    { 
     //Set the <form>'s postback url to the route 
     var webForm = page as Page; 
     if (webForm != null) 
     webForm.Load += delegate { webForm.Form.Action = 
            requestContext.HttpContext.Request.RawUrl; }; 
    } 
    return page; 
    } 
} 

Ceci est cassé un peu dans les endroits impairs pour empêcher le défilement horizontal, mais vous obtenez le point global. Encore une fois, assurez-vous que c'est le dernier route, sinon il va gérer tous vos itinéraires.

+0

Est-il possible de faire quelque chose comme: Dim perspective As String = Page.RouteData.Values ​​("* value") Je sais que c'est quand ce n'est pas un joker, mais qu'en est-il un caractère générique? – davemackey

+1

Je reçois une erreur de suivi. Qu'est-ce que je rate? (.Net 4.5) System.Web.Routing.RouteBase 'ne contient pas de définition pour' Url 'et aucune méthode d'extension' Url 'acceptant un premier argument de type' System.Web.Routing.RouteBase 'n'a été trouvée (sont manque-t-il une directive using ou une référence d'assembly?) – HGMamaci

0

De plus - Gardez à l'esprit que vous devez ajouter une exception pour les fichiers .axd dans votre fichier Global.asax s'il y a des contrôles de validation dans votre application web:

http://basgun.wordpress.com/2010/10/25/getting-syntax-error-in-asp-net-routing-due-to-webresource-axd/

Sinon, vous effectuerez continuer à recevoir une erreur de syntaxe car le routage récupère les fichiers .axd et ne charge pas correctement les fichiers JavaScript nécessaires aux contrôles de validation.

+0

Le lien est privé, ou le blog est privé. – GoldBishop

Questions connexes