2010-07-09 6 views
1

J'utilise ASP.NET 4 formulaires Web routage, par exemple comme celui-ci:ASP.NET 4 formulaires Web images de routage

routes.MapPageRoute("page-browse", "{Language}/{Label}", "~/Default.aspx") 

Ainsi, le webadress pourrait ressembler à: http://localhost/mywebsite/eng/home

Dans la racine de mon site web j'ai un dossier "Images".

L'affichage de l'image fonctionne lorsque je suis à la racine de mon site Web, par ex. en utilisant http://localhost/mywebsite/default.aspx

Mais lors de l'utilisation de routage ne fonctionne pas, parce que l'image url relative regardera http://localhost/mywebsite/eng/images au lieu de http://localhost/mywebsite/images

est-il un moyen d'éviter cela en utilisant ASP.NET 4 mécanisme de routage? Ou est le seul moyen d'utiliser des URL absolues pour les images?

Répondre

5

Deux choses que vous pourriez essayer.

1) Définissez RouteExistingFiles sur false. Cela arrêtera le routage sur tout fichier correspondant au serveur existant. Seuls urls "virtuels" qui correspondent à une route seront effectivement acheminés:

routes.RouteExistingFiles = false; 

2) Utilisez un itinéraire StopRoutingHandler. Par exemple, cela arrêterait le routage sur tous les jpgs. Vous pouvez également le configurer pour ignorer le répertoire d'images entier.

routes.Add(new Route("*\.jpg", new StopRoutingHandler())); 
+0

le gestionnaire de routage d'arrêt est * je pense * la façon recommandée ms de le faire. – jonezy

0

Comment faites-vous référence à vos images? Vous devriez juste être en mesure d'utiliser un chemin virtuel à la racine du site, en utilisant un préfixe '/' (à moins que je ne comprenne complètement la question)

par exemple.

<img src="/mywebsite/images/image.jpg" /> 
+0

Un tel chemin virtuel se traduira par: http://www.website.com/mywebsite/images/image.jpg Et dans le cas où la route est monsiteweb/langue/il passera à: http://www.website.com/mywebsite/language/images/image.jpg Vous voyez où est le problème? Le chemin du répertoire de l'image n'est plus correct dans ce cas. Une solution consisterait à utiliser mais je ne peux pas l'utiliser car la plupart des images que j'utilise sont manuellement incluses dans le site Web par l'utilisateur en utilisant un éditeur html, donc runat = "server" ne peut pas être inclus. –

1
  1. Créer une implémentation IHttpHandler qui localise le chemin absolu du fichier à partir du chemin virtuel et rend comme filestream.

  2. Créez une implémentation IRouteHandler qui renvoie le gestionnaire http que je viens de décrire si le fichier a une extension d'image ou utilise le mécanisme de routage par défaut autrement.

  3. Enregistrez le gestionnaire d'itinéraire à utiliser dans l'itinéraire.

Questions connexes