【发布时间】:2009-12-04 17:59:39
【问题描述】:
我遇到了这段代码,它应该在动态(重写)url 的层次结构中确定父 url。基本逻辑是这样的:
"/testing/parent/default.aspx" --> "/testing/default.aspx"
"/testing/parent.aspx" --> "/testing/default.aspx"
"/testing/default.aspx" --> "/default.aspx"
"/default.aspx" --> null
...
private string GetParentUrl(string url)
{
string parentUrl = url;
if (parentUrl.EndsWith("Default.aspx", StringComparison.OrdinalIgnoreCase))
{
parentUrl = parentUrl.Substring(0, parentUrl.Length - 12);
if (parentUrl.EndsWith("/"))
parentUrl = parentUrl.Substring(0, parentUrl.Length - 1);
}
int i = parentUrl.LastIndexOf("/");
if (i < 2) return null;
parentUrl = parentUrl.Substring(0, i + 1);
return string.Format(CultureInfo.InvariantCulture, "{0}Default.aspx", parentUrl);
}
此代码有效,但对我来说有异味。它不适用于具有查询字符串的网址。如何使用正则表达式改进它?
【问题讨论】:
-
不管使用正则表达式重新实现您的代码,您都应该首先使用
System.Uri类解析 URL 以仅提取路径字符串,然后对其进行处理。不要尝试解析整个 URL,很容易出错 - 重用现有的工作代码!