将字符串测试添加到URL?

时间:2012-10-16 09:48:23

标签: c# asp.net url-rewriting

我有一个生产环境和测试环境。客户已使用不同的网址设置了测试环境,例如http://intranet.company.comhttp://intranettest.company.com,这非常有意义。测试数据库中的内容与生产数据库中的内容相同,我们在其中存储网页上使用的链接。我无权访问数据库,需要更改从生产到测试环境的链接

  • http://intranet.company.com应解析为http://intranettest.company.com

可能会有其他结尾,例如/sites/marketing但没有文件名(default.aspx)。该链接还可以指定一个端口(在我的开发环境中,这对于整个问题并不重要。开发链接是http://devenv:1337/sites/marketing,这可能解释了我的奇怪代码。

我已经制作了片段,但感觉不对,后来我可以看到几个问题 - 使用它。有没有比以下更好的方法来编辑我的网址?

string SiteCollectionURL = SPContext.Current.Web.Site.Url.ToString();

char[] delimiterChar = {'/', '.'};
string[] splitSiteCollectionURL = SiteCollectionURL.Split(delimiterChar);
string[] splitDepartmentLinkURL = departmentLink.Split(delimiterChar);
string fixedUrl = departmentLink;

if (splitSiteCollectionURL[2].Contains("test"))
{
    fixedUrl = "";
    for (int i = 0; i < splitDepartmentLinkURL.Length; i++)
    {
        if (i == 0)
        {
            fixedUrl += splitDepartmentLinkURL[i] + "//";
        }
        else if (i == 2)
        {
            if (splitDepartmentLinkURL[i].Contains(":"))
            {
                string[] splitUrlColon = splitDepartmentLinkURL[2].Split(':');
                fixedUrl += splitUrlColon[0] + "test:" + splitUrlColon[1] + "/";
            }
            else
            {
                fixedUrl += splitDepartmentLinkURL[i] + "test" + ".";
            }
        }
        else if (i > 2 && i < 4)
        {
            fixedUrl += splitDepartmentLinkURL[i] + ".";
        }
        else if (i >= 4 && i != splitDepartmentLinkURL.Length - 1)
        {
            fixedUrl += splitDepartmentLinkURL[i] + "/";
        }
        else
        {
            fixedUrl += splitDepartmentLinkURL[i];
        }
    }
    departmentLink = fixedUrl;
}

2 个答案:

答案 0 :(得分:2)

您预见到的问题是什么?如果你在问题中解释它们会有所帮助。但请看一下UriBuilder class

var uris = new List<String>
{
    @"http://intranet.company.com",
    @"http://myhost.company.com:1337",
    @"http://intranet.company.com/deep/path?wat",
    @"http://myhost.company.com:1337/some/other?path",
};


foreach (var u in uris)
{
    var ub = new UriBuilder(u);
    ub.Host = "intranettest.company.com";
    ub.Port = 80;

    Console.WriteLine(ub.Uri);
}

适合我:

http://intranettest.company.com/
http://intranettest.company.com/
http://intranettest.company.com/deep/path?wat
http://intranettest.company.com/some/other?path

答案 1 :(得分:0)

也许我没有完全跟随,但为了让这个论点开始:
为什么不

var newUrl = oldUrl.Replace(@"http://intranet.company.com", @"http://intranettest.company.com");