ASP.NET 4 Web窗体路由图像

问题描述:

我使用ASP.NET 4个Web表单路由,例如像这样:ASP.NET 4 Web窗体路由图像

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

所以webadress可能看起来像:http://localhost/mywebsite/eng/home

在根我的网站有一个文件夹“图片”。

当我处于我的网站根目录时,图像显示可以正常工作,例如,通过使用http://localhost/mywebsite/default.aspx

但在使用路由它不工作的时候,因为图像相对URL将着眼于http://localhost/mywebsite/eng/images,而不是http://localhost/mywebsite/images

是否有办法防止这种使用ASP.NET 4路由机制?或者是唯一的方法来使用绝对网址的图像?

你可以尝试两件事。

1)将RouteExistingFiles设置为false。这将停止服务器匹配的任何文件的路由。只有匹配路由“虚拟”的URL实际上将被路由:

routes.RouteExistingFiles = false; 

2)使用StopRoutingHandler路线。例如,这将停止所有jpgs的路由。您也可以将其设置为忽略整个图像目录。

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

停止路由处理程序是*我认为* MS推荐的方式来做到这一点。 – jonezy 2011-03-07 21:34:45

你是如何参考你的图像? 您应该只能使用到站点根目录的虚拟路径,使用前缀'/'(除非我完全误解了该问题)

例如,

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

这样的虚拟路径将转化为: http://www.website.com/mywebsite/images/image.jpg 而如果该路由mywebsite /语言/它会更改为: http://www.website.com/mywebsite/language/images/image.jpg 你看到问题在哪里?在这种情况下,图像目录路径不再正确。 解决方案将使用,但我不能使用它,因为我使用的大多数图像都是用户使用html编辑器手动包含在网站中,所以runat =“server”不能包含在内。 – 2010-07-11 11:29:53

  1. 创建IHttpHandler实现从虚拟路径查找文件的绝对路径,并呈现为一个FILESTREAM。

  2. 创建一个IRouteHandler实现,该实现返回刚才描述的http处理程序,如果文件具有图像扩展名,或者使用默认路由机制。

  3. 注册要在路由中使用的路由处理程序。