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

Blazor中C#嵌入带RLS的Power BI报BadRequest错误求助

排查Blazor嵌入带RLS的Power BI报表时的BadRequest错误

先获取详细错误信息

你已经捕获了HttpOperationException,但需重点查看ex.Response.Content的具体文本——BadRequest响应通常会明确指出错误原因,比如角色不存在、数据集参数缺失、用户名不匹配等,这是最直接的排查依据。

核心排查点及修正方案

1. 补全EffectiveIdentity的datasets参数

RLS是绑定到数据集的,生成嵌入令牌时必须指定该用户身份对应的数据集。你当前注释掉了datasets参数,这是常见的错误诱因:

new EffectiveIdentity(
    username: "a9638d14-85ba-47db-b448-9b739ef4d274",
    roles: new List<string> { "UseID" },
    datasets: new List<string> { datasetId } // 必须添加这行,指定RLS对应的数据集
)

2. 验证RLS角色名称的准确性

roles里的"UseID"必须和数据集RLS中创建的角色名称完全一致(大小写敏感)。如果角色名称拼写错误(比如实际是UserID),会直接触发BadRequest。

3. 确认用户名与RLS规则匹配

你使用GUID作为username,需确保数据集的RLS规则是基于这个GUID字段过滤数据的。例如:

  • 若RLS规则为[UserGUID] = USERPRINCIPALNAME(),则传入的GUID需与该字段值匹配;
  • 若RLS规则用的是用户UPN(如邮箱),则username应改为对应UPN而非GUID。

4. 检查服务主体权限

  • 确保ClientID对应的服务主体在Power BI工作区中拥有成员或管理员权限,至少具备生成嵌入令牌的权限;
  • 服务主体需被授予目标数据集的访问权限,且允许生成包含RLS身份的令牌。

修正后的关键代码片段

var generateTokenRequestParameters = new GenerateTokenRequest(
    accessLevel: "edit",
    allowSaveAs: true,
    datasetId: datasetId,
    identities: new List<EffectiveIdentity>
    {
        new EffectiveIdentity(
            username: "a9638d14-85ba-47db-b448-9b739ef4d274",
            roles: new List<string> { "UseID" },
            datasets: new List<string> { datasetId } // 新增:指定数据集
        )
    }
);

额外注意事项

  • 确认workspaceId、reportId、datasetId均为有效的GUID字符串,无格式或拼写错误;
  • 若不需要编辑权限,将accessLevel改为"view"可降低权限要求,减少出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:38:25