有没有办法通过网址获取List对象?
我知道你可以通过标题获得一个列表:
ClientContext context = new ClientContext("http://foo");
List list = context.Web.Lists.GetByTitle("title");
context.Load(list);
context.ExecuteQuery();
但我希望用户能够在文本框中将浏览器中的网址复制粘贴(例如http://foo/subsite/ListName/Forms/AllItems.aspx),然后从该网址中提取List对象。
答案 0 :(得分:5)
不,没有直接从URL获取List
对象的方法。正如您所指出的,您可以从列表标题中获取它,您也可以通过其ID获取它(请参阅ListCollection.GetById
)。
我的建议是做一些网址黑客攻击; SharePoint URL遵循可预测的模式。如果用户复制/粘贴列表URL,他们肯定会拥有视图的URL,这将以/Forms/[ViewName].aspx
之类的结尾。在路径中查找“/ Forms /”,获取前面的子字符串,然后使用路径的新结尾作为列表名称。
通过尝试加载列表,捕获列表不存在时引发的ArgumentException
并使用它作为向用户显示错误消息的机会,可以轻松地执行一些防御性编码
答案 1 :(得分:0)
试试这个:
private static List GetListByServerRelativeUrl(string serverRelativeUrl)
{
using (ClientContext ctx = new ClientContext("http://yoursite"))
{
var q = from list in ctx.Web.Lists
where list.RootFolder.ServerRelativeUrl == serverRelativeUrl
select list;
var r = ctx.LoadQuery(q);
ctx.ExecuteQuery();
return r;
}
}