合并Url:SPUtility.ConcatUrls

作者:杨柳@水杉网络

基本信息

程序集

Microsoft.SharePoint.dll

命名空间

Microsoft.SharePoint.Utilities

类型

静态方法

介绍

在SharePoint服务器端对象模型中,Site Url,资源的ServerRelativeUrl是分开存储的,因此,在开发过程中如果需要得到SharePoint某个资源的完整资源路径,往往需要做字符串拼装,此方法就是为了方便我们进行路径拼装。

方法

位于Microsoft.SharePoint.Utilities.SPUtility类,具体描述如下:

//拼装Url路径,目的只是确保两个参数直接连接部分只能有一个"/"连接符。
public static string ConcatUrls(string firstPart, string secondPart)
{
    return SPUrlUtility.CombineUrl(firstPart, secondPart);
}
//此方法来至于SPUrlUtility类
public static string CombineUrl(string baseUrlPath, string additionalNodes)
{
    if (baseUrlPath == null)
    {
        return additionalNodes;
    }
    if (additionalNodes == null)
    {
        return additionalNodes;
    }
    if (baseUrlPath.EndsWith("/", StringComparison.OrdinalIgnoreCase))
    {
        if (additionalNodes.StartsWith("/", StringComparison.OrdinalIgnoreCase))
        {
            baseUrlPath = baseUrlPath.TrimEnd(new char[] { '/' });
        }
        return (baseUrlPath + additionalNodes);
    }
    if (additionalNodes.StartsWith("/", StringComparison.OrdinalIgnoreCase))
    {
        return (baseUrlPath + additionalNodes);
    }
    return (baseUrlPath + "/" + additionalNodes);
}

使用场景

此方法的目的在于确保Url的两部分字符串连接的时候只能出现一个"/"符号,正如前面的介绍,这是由于SharePoint资源Url存储的特殊性决定的。比如下面截取乐Microsoft.SharePoint.ProjectPolicyUtility类中使用此方法的方式:

//获取列表 PackageList 的服务器端相对路径
internal static SPList GetPackageList(SPSite site)
{
    SPWeb rootWeb = site.RootWeb;
    string strUrl = SPUtility.ConcatUrls(rootWeb.ServerRelativeUrl, "/Lists/PackageList");
    try
    {
        return rootWeb.GetList(strUrl);
    }
    catch (FileNotFoundException)
    {
        return null;
    }
}

仔细阅读此方法的实现代码,目的很简单,就是为了确保Url路径拼装过程中接口处只有一个“/”符号,在实际开发过程中,可以根据业务逻辑扩展此方法。

测试代码

以下代码在SharePoint Powershell命令行工具中执行

#####
# 输出结果:http://www.shuishan-tech.com/about.aspx
#####
[Microsoft.SharePoint.Utilities.SPUtility]::ConcatUrls("http://www.shuishan-tech.com/", "/about.aspx");

#####
# 输出结果:http://www.shuishan-tech.com/about.aspx
#####
[Microsoft.SharePoint.Utilities.SPUtility]::ConcatUrls("http://www.shuishan-tech.com", "/about.aspx");

#####
# 输出结果:http://www.shuishan-tech.com/about.aspx
#####
[Microsoft.SharePoint.Utilities.SPUtility]::ConcatUrls("http://www.shuishan-tech.com/", "about.aspx");

#####
# 输出结果:http://www.shuishan-tech.com/about.aspx
#####
[Microsoft.SharePoint.Utilities.SPUtility]::ConcatUrls("http://www.shuishan-tech.com", "about.aspx");