如何在 Api-Username 标头中处理非 ASCII 字符?

您好,

我正在使用 RestSharp 集成 Discourse API,但在使用包含非 ASCII 字符(特别是德语变音符号)的用户名时遇到了问题。我需要模拟用户名为 foö(包含 ö)的用户。

当在 Api-Username 标头中发送原始用户名时,我收到:请求头中只允许包含 ASCII 字符

当对用户名进行 URL 编码时(Uri.EscapeDataString("foö")fo%C3%B6),身份验证失败,返回:{"errors":["您无权查看所请求的资源。API 用户名或密钥无效。"],"error_type":"invalid_access"}(访问被拒绝/用户不存在)

我使用的是具有管理员权限的 API 密钥。端点:POST /posts.json,用于代表用户创建主题。

传递包含非 ASCII 字符的用户名到 Api-Username 标头的正确方法是什么?我应该:

  1. 使用不同的编码方法?
  2. 改用用户 ID(如果是,使用哪个标头名称)?
  3. 完全使用其他方法?

感谢您的指导!

1 个赞

感谢 @xbd 的发现 - 这将通过

修复

但在同时…

…您可以通过 Api-User-Id 标头使用用户 ID(如果您有的话,实际上更推荐使用用户 ID 而不是用户名)

curl -X GET "https://your-discourse.com/admin/users.json" \
  -H "Api-Key: your-api-key" \
  -H "Api-User-Id: 123"

3 个赞