在SharePoint开发中,CSOM (Client Side Object Model) 是一个常用的API,用于从客户端应用程序与SharePoint进行交互。区分连接目标是SharePoint Online还是本地(On-Premises)对于正确处理认证、URL结构和功能差异非常重要。
public bool IsSharePointOnline(string siteUrl)
{
try
{
Uri uri = new Uri(siteUrl);
string host = uri.Host.ToLower();
// SharePoint Online通常包含sharepoint.com或特定租户名称
return host.Contains(".sharepoint.com") ||
host.Contains("-my.sharepoint.com") ||
host.Contains(".sharepoint.cn");
}
catch
{
return false;
}
}
public bool IsSharePointOnline(ClientContext context)
{
try
{
// SharePoint Online通常使用OAuth或Azure AD认证
if (context.Credentials is SharePointOnlineCredentials)
{
return true;
}
// 本地通常使用NetworkCredential或Windows认证
return false;
}
catch
{
return false;
}
}
public bool IsSharePointOnline(ClientContext context)
{
try
{
// SharePoint Online通常使用较新的API版本
var version = context.ServerLibraryVersion;
return version.Major >= 16; // SPO通常使用16.x或更高版本
}
catch
{
return false;
}
}
优势:
限制:
using Microsoft.SharePoint.Client;
using System;
public class SharePointEnvironmentDetector
{
public enum SharePointEnvironment
{
Online,
OnPremises,
Unknown
}
public SharePointEnvironment DetectEnvironment(string siteUrl, ClientContext context = null)
{
// 首先通过URL检测
if (IsSharePointOnlineByUrl(siteUrl))
{
return SharePointEnvironment.Online;
}
// 如果提供了context,尝试通过其他方法检测
if (context != null)
{
if (IsSharePointOnlineByAuthentication(context))
{
return SharePointEnvironment.Online;
}
if (IsSharePointOnlineByApiVersion(context))
{
return SharePointEnvironment.Online;
}
}
// 如果所有检测都失败,假设是本地环境
return SharePointEnvironment.OnPremises;
}
private bool IsSharePointOnlineByUrl(string siteUrl)
{
try
{
Uri uri = new Uri(siteUrl);
string host = uri.Host.ToLower();
return host.Contains(".sharepoint.com") ||
host.Contains("-my.sharepoint.com") ||
host.Contains(".sharepoint.cn");
}
catch
{
return false;
}
}
private bool IsSharePointOnlineByAuthentication(ClientContext context)
{
try
{
return context.Credentials is SharePointOnlineCredentials;
}
catch
{
return false;
}
}
private bool IsSharePointOnlineByApiVersion(ClientContext context)
{
try
{
var version = context.ServerLibraryVersion;
return version.Major >= 16;
}
catch
{
return false;
}
}
}
string siteUrl = "https://contoso.sharepoint.com/sites/mysite";
using (var context = new ClientContext(siteUrl))
{
context.Credentials = new SharePointOnlineCredentials(username, securePassword);
var detector = new SharePointEnvironmentDetector();
var env = detector.DetectEnvironment(siteUrl, context);
Console.WriteLine($"Environment: {env}");
}
通过组合多种检测方法,可以更可靠地确定连接的是SharePoint Online还是本地环境。
没有搜到相关的文章