You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Azure Function替换PnP.Core.Services为CSOM的方法及兼容性咨询

替换PnP为SharePoint CSOM实现Azure Function列表项创建(.NET 6)

一、CSOM对.NET 6的支持情况

SharePoint Online CSOM的官方NuGet包(Microsoft.SharePointOnline.CSOM)完全支持.NET 6,建议使用16.0.24121.12000及以上的稳定版本,直接通过NuGet安装即可。

二、代码替换示例

以下是对应原有三个文件的CSOM改造代码:

1. AzureFunctionSettings.cs

配置类无需大幅修改,保持原有配置项结构即可:

public class AzureFunctionSettings
{
    public string SharePointSiteUrl { get; set; }
    public string SharePointClientId { get; set; }
    public string SharePointClientSecret { get; set; }
}

2. Startup.cs

替换PnP服务注册逻辑,改为注册SharePoint ClientContext实例:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SharePoint.Client;
using System;

[assembly: FunctionsStartup(typeof(YourNamespace.Startup))]
namespace YourNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            // 绑定配置参数
            var config = builder.GetContext().Configuration;
            var settings = config.GetSection(nameof(AzureFunctionSettings)).Get<AzureFunctionSettings>();
            builder.Services.AddSingleton(settings);

            // 注册Scoped的ClientContext,每次请求创建一个实例
            builder.Services.AddScoped(sp =>
            {
                var ctx = new ClientContext(settings.SharePointSiteUrl);
                // 应用权限认证(ClientId + ClientSecret)
                var secureSecret = new System.Security.SecureString();
                foreach (char c in settings.SharePointClientSecret)
                {
                    secureSecret.AppendChar(c);
                }
                ctx.Credentials = new SharePointOnlineCredentials(settings.SharePointClientId, secureSecret);
                
                // 设置请求超时(可选)
                ctx.RequestTimeout = TimeSpan.FromMinutes(5);
                return ctx;
            });
        }
    }
}

3. Function1.cs

替换PnP的列表项创建逻辑,改用CSOM原生API:

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.SharePoint.Client;
using System.Threading.Tasks;

namespace YourNamespace
{
    public class Function1
    {
        private readonly AzureFunctionSettings _settings;
        private readonly ClientContext _clientContext;

        // 构造函数注入依赖
        public Function1(AzureFunctionSettings settings, ClientContext clientContext)
        {
            _settings = settings;
            _clientContext = clientContext;
        }

        [FunctionName("Function1")]
        public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {System.DateTime.Now}");

            try
            {
                // 获取目标列表(替换为你的列表名称)
                var targetList = _clientContext.Web.Lists.GetByTitle("TestList");
                
                // 创建新列表项
                var itemCreateInfo = new ListItemCreationInformation();
                var newListItem = targetList.AddItem(itemCreateInfo);
                
                // 设置字段值(替换为你的实际字段名称和内容)
                newListItem["Title"] = "CSOM创建的新项";
                newListItem["Description"] = ".NET 6 Azure Function通过CSOM提交";
                
                // 提交更改到SharePoint
                newListItem.Update();
                await _clientContext.ExecuteQueryAsync();

                log.LogInformation($"成功创建列表项,ID: {newListItem.Id}");
            }
            catch (System.Exception ex)
            {
                log.LogError(ex, "创建SharePoint列表项失败");
                throw;
            }
        }
    }
}

三、关键注意事项

  • 安装依赖:必须安装Microsoft.SharePointOnline.CSOM NuGet包,可通过包管理器或命令行Install-Package Microsoft.SharePointOnline.CSOM完成
  • 权限配置:确保ClientId对应的Azure AD应用拥有目标SharePoint站点/列表的写入权限(可通过站点权限管理添加应用主体)
  • 认证扩展:如果需要使用用户上下文认证,可替换为OAuth令牌方式,但Azure Function场景下应用权限更适合无交互执行
  • 性能优化:CSOM的ExecuteQueryAsync是批量提交请求,尽量合并多个操作后再调用,避免频繁请求

内容的提问来源于stack exchange,提问作者John John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:35:44