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

SPFx中如何使用PnP 3执行自定义端点通用Graph调用

PnP Graph v3 自定义Graph端点调用方案

@pnp/graph v3版本确实移除了v2版本默认导出的graph实例,必须通过graphfi工厂初始化实例,你当前使用的初始化逻辑是正确的。
自定义/未做内置封装的Graph API端点不需要退回使用MSGraphClient,可直接通过PnP实例原生支持的api()方法调用,用法和原MSGraphClient逻辑基本一致。

调用示例

对应你之前的权限管理分配查询请求,可直接按如下方式实现:

// 获取初始化完成的GraphFI实例
const graphInstance = getGraph(this.context);

const assignmentList = await graphInstance
  .api("identityGovernance/entitlementManagement/accessPackageAssignments/filterByCurrentUser(on='target')")
  .version("beta")
  .select("id")
  .expand("accessPackageAssignmentResourceRoles")
  .filter("assignmentState ne 'Expired'")
  .get();

推荐使用链式的select/filter/expand方法拼接查询参数,库会自动完成URL编码,避免特殊字符转义错误。

如果需要调用更特殊的端点,也支持直接拼接完整路径、或通过query方法传入自定义参数:

// 直接传入完整路径的兼容写法
const fullPath = "identityGovernance/entitlementManagement/accessPackageAssignments/filterByCurrentUser(on='target')?$select=id&$expand=accessPackageAssignmentResourceRoles&$filter=assignmentState ne 'Expired'";
const result1 = await graphInstance.api(fullPath).version("beta").get();

// 通过query方法传入自定义查询参数
const result2 = await graphInstance
  .api("identityGovernance/entitlementManagement/accessPackageAssignments/filterByCurrentUser(on='target')")
  .version("beta")
  .query({
    $select: "id",
    $expand: "accessPackageAssignmentResourceRoles",
    $filter: "assignmentState ne 'Expired'"
  })
  .get();

使用注意事项

  • 传入api()的端点路径不要带前导斜杠/,库会自动拼接Graph服务基础地址,带前导斜杠会导致路径拼接错误
  • POST/PUT/DELETE等其他HTTP请求,可直接在链式调用后接.post(requestBody)/.put(requestBody)/.delete()方法,和内置封装接口的调用规则完全一致
  • 需要添加自定义请求头时,可链式调用.headers({头名: 头值})传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:21:30