ASP.Net - 编码URL引起的路径问题

时间:2009-07-28 15:25:52

标签: c# asp.net url-rewriting

我正在建立一个网上商店,我对一些网址有点问题。

我的数据库中有一个大型的部门和类别目录,用于构建我的主菜单。

网址的格式为应用/商店/部门/类别 (所有商店URL都被重写为store.aspx?Querystringstuff)

问题是我的代码生成的一些网址有效,但阻止了网页的CSS正常加载。

具体是源文本包含斜杠的URL。 我当然是编码源文本的URL,但我仍然遇到问题。

我的css链接在母版页中 -

 <link rel="stylesheet" type="text/css" href="~/CSS/Layout.css" runat="server">

有效的示例链接

制冰机

http://localhost:1079/ABCWeb/Store/Refrigeration+Equipment/Ice+Machines.aspx

Steam Table Pans

http://localhost:1079/ABCWeb/Store/Catering+%26+Buffet/Steam+Table+Pans.aspx

中断的示例链接 -

餐巾架/分配器

http://localhost:1079/ABCWeb/Store/Tabletop/Napkin+Holders%2fDispensers.aspx

蝾/ Cheesemelters

http://localhost:1079/ABCWeb/Store/Cooking+Equipment/Salamanders%2fCheesemelters.aspx

如果重要的是我的构建网址的代码 - 该数组包含路径中的项目数组 第一个元素未编码,因为它包含当前存储路径。

 private static System.Text.StringBuilder AppendAnchor(this System.Text.StringBuilder str, string[] path)
{   
    return str.Append("<a href='")
        .Append(path.Aggregate((a, b) => a + "/" + HttpUtility.UrlEncode(b))) 
        .Append(".aspx'><span>")
        .Append(HttpUtility.HtmlEncode(path[path.Length-1]))
        .Append("</span></a>");
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

尝试使用相对于网络根目录的路径来包含样式表。在ASP .NET webforms中执行此操作的简单方法是在服务器端控件上使用〜,例如。

<link rel="Stylesheet" type="text/css" href="~/Css/MyCssFile.css" runat="server" />

然后,ASP.NET应该为您解析正确的URL,无论URL是什么。

答案 1 :(得分:0)

我看得更远了 - “〜”实际上似乎是问题发生的地方。

链接工作正常,但我认为服务器在生成相对路径时没有正确解析...

以下是工作链接上生成的代码的css链接  

../../CSS/Layout.css

以下是相同深度的损坏页面上的css链接
 

../../../CSS/Layout.css"

这是一个非常难看的修复工作 - 不确定是否有更好的方法

<link rel="stylesheet" type="text/css" href="<%=Request.ApplicationPath+"/Css/Layout.css" %>" />

奇怪的是,站点地图中类似路径生成的导航链接工作正常。当它从站点地图生成路径并且不尝试构建相对路径时,它可能更好地理解完全hierchy。