【发布时间】: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是正确的内容类型。而utf8NoBOM是Get-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