2009-06-03 11 views
3

J'ai trouvé une limitation dans le mécanisme de routage pour ASP.Net mvc et j'essaie de trouver une solution de contournement.Extension du mécanisme de routage Asp.Net MVC

J'ai posté une question connexe here sur le problème que j'avais.

L'essentiel du problème est que les routes qui se terminent par un. (point) ne sont jamais gérés par le mécanisme de routage par défaut. Une erreur "Resource Can not Found" est toujours levée. Par exemple, il ne peut pas gérer ces urls:

http://www.wikipediamaze.com/wiki/Washington,_D.C. 
http://www.wikipediamaze.com/wiki/anythingendinglikethis. 

si je change pour le paramètre querystring comme cela, il fonctionne très bien:

http://www.wikipediamaze.com/wiki/?topic=Washington,_D.C. 

Je suis en train de trouver un point d'extensibilité dans le mécanisme de routage qui sera aide-moi à résoudre ce problème. J'ai essayé d'autres solutions comme ceci:

//Global.asax.cs 
protected void Application_Error() 
{ 
    var url = HttpContext.Current.Request.RawUrl; 
    if(TopicRegex.IsMatch(url)) 
    { 
     var fixedUrl = FixUrlPath(url); 

     //This throws an error 
     Response.Redirect(fixedUrl); 

     //This also throws an error 
     Server.Transfer(fixedUrl); 
     } 
} 

Je devine que les erreurs jettent Response.Redirect et Server.Transfer parce que dans MVC, vous devriez appeler les méthodes de RedirectToAction du contrôleur. Bien sûr, je ne peut même pas obtenir au contrôleur.

Cela semble être une limite assez importante compte tenu du serveur Apache que Wikipedia utilise gère très bien. essayez-le http://en.wikipedia.org/wiki/Washington,_D.C. Si quelqu'un pourrait s'il vous plaît offrir de l'aide ici, je l'apprécierais.

+0

En l'essayant moi-même, je vois des périodes passer sans problème. Pourriez-vous poster un exemple des routes que vous définissez et des contrôleurs qu'elles représentent? – tghw

+0

http://stackoverflow.com/questions/429963/the-resource-cannot-be-found-error-wh-there-is-a-dot-at-the-end-of-the-url – GuyIncognito

Répondre

1

Pourriez-vous activer la vérification du fichier existe dans les routes, mais autoriser certaines extensions?

routes.RouteExistingFiles = true; 

// Ignore the assets directory which contains images, js, css & html 
routes.IgnoreRoute("Assets/{*pathInfo}"); 

// Ignore text, html, files. 
routes.IgnoreRoute("{file}.txt"); 
routes.IgnoreRoute("{file}.htm"); 
routes.IgnoreRoute("{file}.html"); 
routes.IgnoreRoute("{file}.aspx");