我遇到过这段代码,它应该确定动态(重写)网址层次结构中的父网址。基本逻辑是这样的:
"/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);
}
此代码有效,但它闻起来像我。它不适用于具有查询字符串的网址。如何使用正则表达式来改进它?
答案 0 :(得分:4)
查看SO question "Getting the parent name of a URI/URL from absolute name C#"
的答案这将向您展示如何使用System.Uri
访问网址的细分。 System.Uri
还允许以您希望的方式操作URL(嗯,而不是自定义逻辑),而不存在创建无效URL的危险。没有必要破解自己的功能来分析URL。
答案 1 :(得分:1)
直接的方法是将网址拆分为“?”并在最后连接查询字符串......
答案 2 :(得分:1)
我建议你不要在这种情况下使用Regex。解决这个任务的正则表达式将是“真正的代码味道”。上面的代码并不是那么糟糕,使用f3lix和Leon Shmulevich建议使其更好。