【问题标题】:ASP.NET 4 Web forms Routing imagesASP.NET 4 Web 窗体路由图像
【发布时间】:2011-03-13 22:45:38
【问题描述】:

我正在使用 ASP.NET 4 Web 表单路由,例如这样:

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

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

在我网站的根目录中,我有一个文件夹“Images”。

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

但是当使用路由时它不起作用,因为图像相对 url 将查看 http://localhost/mywebsite/eng/images 而不是 http://localhost/mywebsite/images

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

【问题讨论】:

    标签: asp.net routing asp.net-4.0 asp.net-routing


    【解决方案1】:

    你可以尝试两件事。

    1) 将 RouteExistingFiles 设置为 false。这将停止在服务器匹配为已存在的任何文件上进行路由。只有匹配路由的“虚拟”url才会被实际路由:

    routes.RouteExistingFiles = false;
    

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

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

    【讨论】:

    • 停止路由处理程序是 我认为 ms 推荐的方法。
    【解决方案2】:
    1. 创建一个IHttpHandler 实现,从虚拟路径中定位文件的绝对路径并将其呈现为文件流。

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

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

    【讨论】:

      【解决方案3】:

      您如何引用您的图片? 您应该能够使用“/”前缀来使用站点根目录的虚拟路径(除非我完全误解了这个问题)

      例如

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

      【讨论】:

      • 这样的虚拟路径将转换为:website.com/mywebsite/images/image.jpg 如果路由是 mywebsite/language/,它将更改为:website.com/mywebsite/language/images/image.jpg 您知道问题出在哪里了吗?在这种情况下,图像目录路径不再正确。一个解决方案是使用 但我不能使用它,因为我使用的大多数图像都是由用户手动包含在网站中的html 编辑器,所以不能包含 runat="server"。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2017-11-06
      相关资源
      最近更新 更多