ASP MVC友好URL和相对路径图像

时间:2010-08-02 20:33:47

标签: asp.net-mvc relative-path

我有一个ASP.NET MVC页面,我试图显示友好的URL。

所以,我在Home Controller中有一个Category View,它接受categoryKey值来获取页面的内容。

例如:http://localhost/Home/Category/Bikes获取自行车内容。

在我的Global.asax.cs中,我有以下处理这个:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
      "Category",
      "{controller}/{action}/{categoryKey}",
      new { controller = "Home", action = "Category", categoryKey = "" });

  routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  );
}

这很好用,它获取内容,但是,我从内容管理系统获取内容,以便于编辑。在内容管理上添加图像时,它会使用相对路径添加图像:

<img src="../AdminUploadContent/bikes.gif" alt="Bikes" />

现在,如果我转到“http://localhost/Home/Category”,并且该图片标记在基页上,它将拉出图像。但是,如果我转到“http://localhost/Home/Category/”,或添加“/ Home / Category / Bikes”/的实际类别,则图像不会显示。图像的属性指向“http://localhost/Home/AdminUploadContent/bikes.gif”。

我可以在Global.aspx.cs文件中放置什么来处理相对路径吗?即使我手动编辑内容管理以添加../../AdminUploadContent/bikes.gif,它也会切断第一个../,因为它正在进行一些验证。

4 个答案:

答案 0 :(得分:37)

在生成图像路径时使用Url.Content方法。

<img src="@Url.Content("~/AdminUploadContent/bikes.gif")" />

或者如果使用WebForms视图引擎:

<img src="<%= Url.Content("~/AdminUploadContent/bikes.gif") %>" />

答案 1 :(得分:2)

您可以使用相对路径“〜/”来引用页面所在的当前虚拟目录。尝试将runat =“server”属性添加到“img”标记中,并在“src”属性中添加“〜”符号:

<img runat="server" src="~/AdminUploadContent/bikes.gif" alt="Bikes" />

答案 2 :(得分:1)

这也有效。

<img src="@Url.Content("~/Images/yourimage.png")"/>

答案 3 :(得分:0)

您可以实现一个自定义http模块,该模块将从相对的../../img.png重写路径,以便例如处理Referer http标头。