2009-05-08 4 views
2

J'utilise la nouvelle fonctionnalité de routage dans ASP.NET 3.5 pour agir comme mon fourre-tout pour les demandes de page sur mon site Web. Je me suis inscrit ma route comme suit dans le global.asax,Routage ASP.NET 3.5 ne pas gérer/(URL racine)

<%@ Application Language="C#" %> 
<%@ Import Namespace="System.Web.Routing" %> 
<script runat="server"> 

    void Application_Start(object sender, EventArgs e) 
    { 

     RegisterRoutes(RouteTable.Routes); 

    } 

    private void RegisterRoutes(RouteCollection Routes) 
    { 

     Route r = new Route("{*URL}", new MyRouteHandler()); 
     Routes.Add(r); 

    } 

</script> 

Le code fonctionne tout à fait bien pour toutes les URL, sauf/(la page racine). Si je vais à une autre URL/bla/quelque chose/foo/ça marche bien et mon gestionnaire est exécuté comme prévu.

Comment puis-je l'exécuter sur la page racine? Je cours le code via la construction de Visual Studio 2008 dans le serveur Web.

+0

La meilleure solution que j'ai fini par trouver pour cela était de créer un fichier vide aspx. Ce fichier aspx est ensuite appelé dans la même méthode que celle utilisée pour l'objet MyRoutHandler décrit ci-dessus, en passant une URL codée en dur de "/". –

Répondre

1

Cassini (le serveur Web intégré de Visual Studio) peut avoir un problème de routage.

Pour citer Dmitryr's blog:

Cassini avait un problème avec les projets ASP.NET à l'aide de routage en raison de la fonction liste des répertoires. Cassini répondrait avec la liste de répertoires à toute demande de répertoire, sans passer la requête à ASP.NET. Par conséquent, les demandes d'URL conviviales seront interceptées par Cassini et n'atteindront jamais ASP.NET. Cette mise à jour (v3.5.0.1) change la logique: toutes les requêtes vont d'abord à ASP.NET, puis Cassini intercepte les réponses 404 et, si la demande concerne un répertoire, répond à la liste des répertoires. Les applications reposant sur des URL/Routing conviviales fonctionnent désormais mieux avec Cassini.

Vous n'avez pas mentionné le comportement que vous voyez lorsque vous allez à la racine. Si vous ne recevez pas de liste de répertoires, vous devez peut-être supprimer votre page par défaut?

+1

J'ai jeté un coup d'oeil à ceci mais n'ai pas pu trouver une version compilée de l'application ou des instructions sur où l'installer réellement après la compilation. J'ai trouvé une solution que je poste ci-dessus. –

0

Je ne suis pas sûr que vous pouvez cibler la racine avec web.routing. Je fais la grande supposition ici que vous avez implémenté web.routing sur une application de formulaires Web. Si tel est le cas, vous continuez à capturer vos requêtes root sur votre page par défaut (c'est-à-dire Default.aspx), auquel cas vous pouvez traiter la requête à partir de là. Mes implémentations web.routing dans le passé ont ciblé une page ASPX dans le répertoire racine que j'ai également configuré comme page par défaut. Si une demande atteint cette page sans aucune information de routage, je suppose que la demande est pour la maison. Si toutefois, vous utilisez le moteur de formulaires Web, mais en utilisant une structure de dossiers de style MVC. Je suggère soit d'ajouter des pages par défaut qui redirigent de manière appropriée ou éventuellement capturer la demande dans l'événement BeginRequest.

Riche