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()));
你是如何参考你的图像? 您应该只能使用到站点根目录的虚拟路径,使用前缀'/'(除非我完全误解了该问题)
例如,
<img src="/mywebsite/images/image.jpg" />
这样的虚拟路径将转化为: 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
创建
IHttpHandler
实现从虚拟路径查找文件的绝对路径,并呈现为一个FILESTREAM。创建一个
IRouteHandler
实现,该实现返回刚才描述的http处理程序,如果文件具有图像扩展名,或者使用默认路由机制。注册要在路由中使用的路由处理程序。
停止路由处理程序是*我认为* MS推荐的方式来做到这一点。 – jonezy 2011-03-07 21:34:45