Sharepoint 2010 中与 ListData.svc 一起使用的列表名称规则

Rules for the list name used with ListData.svc in sharepoint 2010

我想通过 rest API 获取 Sharepoint 2010 列表的内容。但是我的列表的名称确实是有线的(它们包含各种特殊字符,例如:“,”,“?”,“-”,“/”,“(”等)我无法更改它们。

示例:1) 索赔提醒,GT 2) z - Det - andt 3) z - 钢笔 - afregng fra 3860 4) z - Grup/liv moget? (克里德)

我尝试了以下休息 api url :

http://domain/_vti_bin/listdata.svc/"+encodeURIComponent(listName)+"/

当 listName 很简单时,即。没有特殊字符和空格,我得到了输出。但是当它包含上述特殊字符时,就会报错。

我参考了以下url:https://blogs.msdn.microsoft.com/laurieatkinson/2014/06/19/rules-for-the-list-name-used-with-listdata-svc/

但只解决了撇号而不是其他特殊字符。

请帮忙。

您可以使用下面的JavaScript函数来转换列表名称。

function  convertListName(listName){
    var newListName="";
    var array=listName.split(/[.\-_, '?()$%^!@~+`|={}<>\[\]/]/g);   
    for(var i=0;i<array.length;i++){
        newListName+=array[i].charAt(0).toUpperCase() + array[i].slice(1)
    }
    if(!isNaN(newListName.charAt(0))){
        newListName="c_"+newListName;
    }
    return newListName;
}

如果你使用C#代码,我们可以使用Microsoft.SharePoint.Linq.Util.GetFriendlyName方法。

internal static string GetFriendlyName(string name) 
{ 
    string[] array = Regex.Split(name, "[^\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Cf}]", RegexOptions.Compiled); 
    for (int i = 0; i < array.Length; i++) 
    { 
        if (!string.IsNullOrEmpty(array[i]) && char.IsLower(array[i], 0)) 
        { 
            array[i] = char.ToUpper(array[i][0], CultureInfo.InvariantCulture) + ((array[i].Length > 0) ? array[i].Substring(1) : string.Empty); 
        } 
    } 
    name = string.Join(string.Empty, array); 
    if (string.IsNullOrEmpty(name)) 
    { 
        throw new InvalidOperationException(Resources.GetString("CannotConvertNameToValidIdentifier", new object[] 
        { 
            name 
        })); 
    } 
    if (Regex.IsMatch(name[0].ToString(), "[^\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]", RegexOptions.Compiled)) 
    { 
        name = "c_" + name;
    } 
    if (name.Length > 128) 
    { 
        name = name.Substring(0, 128); 
    } 
    return name; 
}