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

如何实现适配Visual Studio 2022的SharePoint文件存在检测函数?

实现基于HttpClient的SharePoint文件存在检测函数

以下是适配Visual Studio 2022、使用HttpClient实现的SharepointFileExist函数,解决了旧API过时及401认证问题:

Imports System.Net.Http

' 建议将HttpClient声明为类级静态变量,避免频繁创建销毁
Private Shared ReadOnly _httpClient As HttpClient = CreateHttpClient()

Private Shared Function CreateHttpClient() As HttpClient
    Dim handler As New HttpClientHandler()
    ' 使用当前用户凭据认证,适配SharePoint的Windows/NTLM认证
    handler.UseDefaultCredentials = True
    handler.PreAuthenticate = True

    Dim client As New HttpClient(handler)
    ' 设置超时时间,根据需求调整
    client.Timeout = TimeSpan.FromSeconds(10)
    Return client
End Function

Private Async Function SharepointFileExist(strMyFile As String) As Task(Of Boolean)
    Try
        ' 使用HEAD请求替代GET,减少数据传输,仅获取响应头判断文件是否存在
        Dim response = Await _httpClient.SendAsync(New HttpRequestMessage(HttpMethod.Head, strMyFile))
        
        Select Case response.StatusCode
            Case Net.HttpStatusCode.OK
                ' 状态码200:文件存在
                Return True
            Case Net.HttpStatusCode.NotFound
                ' 状态码404:文件不存在
                Return False
            Case Net.HttpStatusCode.Unauthorized
                ' 状态码401:认证失败,可根据需求添加日志或提示
                MessageBox.Show("认证失败:无权访问该SharePoint资源")
                Return False
            Case Else
                ' 其他状态码视为异常情况
                Return False
        End Select
    Catch ex As HttpRequestException
        MessageBox.Show($"请求异常:{ex.Message}")
        Return False
    Catch ex As Exception
        MessageBox.Show($"未知错误:{ex.ToString()}")
        Return False
    End Try
End Function

使用说明

由于函数是异步方法,调用时需使用Await关键字:

Private Async Sub CheckFileExists()
    Dim fileUrl As String = "https://your-sharepoint-site.com/sites/xxx/Shared%20Documents/test.docx"
    If Await SharepointFileExist(fileUrl) Then
        MessageBox.Show("文件存在")
    Else
        MessageBox.Show("文件不存在或无法访问")
    End If
End Sub

关键说明

  • HttpClient复用:将HttpClient声明为类级静态变量,避免频繁创建实例导致的Socket资源耗尽问题,这是微软官方推荐的最佳实践。
  • HEAD请求:相较于GET请求,HEAD仅获取响应头,不下载文件内容,大幅提升检测效率。
  • 认证处理:通过HttpClientHandler设置UseDefaultCredentials = True,自动使用当前登录用户的凭据进行认证,适配SharePoint常见的NTLM/Windows认证场景。如果是SharePoint Online(云版本),则需要改用OAuth认证,可替换为对应认证库的实现方式。
  • 状态码判断:明确区分200(存在)、404(不存在)、401(认证失败)三种核心场景,避免因异常捕获误判结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:23:09