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
相关产品推荐
相关产品推荐

