【问题标题】:Does the Azure AD B2C Graph endpoint support UTF-8 charset for uploading policies?Azure AD B2C Graph 端点是否支持 UTF-8 字符集来上传策略?
【发布时间】:2021-03-13 19:20:55
【问题描述】:

我有一个自定义策略 XML 文档,其中包含需要正确呈现 UTF-8 的字符(库拉索岛的国家名称)

当我手动运行使用 UTF-8 的 CI 脚本并将策略上传到 Azure B2C 的 UI 时,我看到了预期的字符。

但是,尽管使用 UTF-8 编码读取文件,但当我为 PUT 请求调用 graph.microsoft.com/beta/trustframework/policies/ 端点时,生成的策略似乎没有使用 UTF-8 呈现。

我为我的内容标题尝试了以下内容

  • $headers.Add("Content-Type", 'application/xml') -- 原版,我第一次看到问题的地方
  • $headers.Add("Content-Type", 'application/xml; charset=UTF-8') -- 没有变化
  • $headers.Add("Content-Type", 'application/xml; charset="UTF-8"') -- 来自服务器的 500 错误
  • $headers.Add("Content-Type", 'application/xml; charset=utf-8') -- 问题依然存在。

有什么想法吗?我确定它一定是我缺少的东西。

我正在做的完整的 powershell 摘录:

    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Content-Type", 'application/xml; charset=utf-8')
    $headers.Add("Authorization", 'Bearer ' + $token)

    $graphuri = 'https://graph.microsoft.com/beta/trustframework/policies/' + $PolicyId + '/$value'
    $policycontent = Get-Content $PathToFile -Encoding UTF8
    $response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $policycontent -Headers $headers

结果图片:

【问题讨论】:

  • application/xml; charset=utf-8 是正确的内容类型。而utf8NoBOMGet-Content 的默认编码。请分享更多关于您的错误的信息。
  • 嗨@PamelaPeng,感谢您的跟进!完全按照您在我的 powershell 中指定的方式使用 ccontent-type,问题是特殊字符已被删除(我已在问题的网页下拉列表中添加了结果图像)。我可以通过正确的 UI 手动上传策略,并且上面脚本中的 AFAICT 我将 UTF-8 文件传递​​给指定了 UTF-8 字符集的 API,但 API 调用的结果是图像以上。
  • 确定它没有正确上传吗?您的浏览器可能根本不显示 UTF-8。您是否尝试过从 API 端点读回策略?
  • @HongOoi 这是一个公平的问题。我认为 API 没有正确获取信息的原因是,通过相同的转换脚本运行的相同 XML 文件在通过 Azure B2C UI 上传自定义策略时没有任何问题。但是同一个文件,当通过我上面提到的脚本通过 API 上传时,会出现问题。
  • 谢谢,在 xsd/schema 中提到支持 utf-8 字符集,这里是文档 - docs.microsoft.com/en-us/graph/api/resources/…github.com/Azure-Samples/…。但是请与时间戳共享相关 id 或请求 id 以进行更多调查。

标签: microsoft-graph-api azure-ad-b2c


【解决方案1】:

以下帖子有所帮助:Deploy custom policies with Azure Pipelines changing the charset encoding

改变

$response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $policycontent -Headers $headers

$response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $policycontent -Headers $headers -ContentType "application/xml; charset=utf-8"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多