仅当提供 Web API 密钥名称时才能指定 Web API 密钥

Posted

技术标签:

【中文标题】仅当提供 Web API 密钥名称时才能指定 Web API 密钥【英文标题】:A web API key can only be specified when a web API key name is provided 【发布时间】:2019-12-19 09:40:03 【问题描述】:

我试图从 Power BI 的供应商的 REST API 中获取数据。

在获取数据时,在 Web API 下,它一直抛出这个错误。请参阅随附的屏幕截图。

这是一种 POST 方法,您可以在其中按响应正文中的任何字段进行过滤(但这次我没有传递任何字段)。

我用来获得响应的查询如下。抱歉,我忘记了在哪里找到的。

let

    apiUrl = "my_api_url",

    token="my_api_key",

    options = [Headers=[Authorization="Bearer " & token ]],

    result = Json.Document(Web.Contents(apiUrl , options))

in

    #"result"

【问题讨论】:

【参考方案1】:

您需要在请求中包含 ApiKeyName,而不是自己建立授权。

例如:

let Source = Web.Contents(apiURL, [ApiKeyName="mauapikey"]),

另见Microsoft Documentation 或someone's blog post

【讨论】:

【参考方案2】:

我最近遇到了类似的问题,但找到了解决方案:

如果您的授权必须在标题中,那么您的解决方案就差不多完成了。在我的情况下,授权需要在标头中,但使用基本身份验证而不是令牌。我相信如果您对代码执行以下操作,它将起作用

let

    apiUrl = "my_api_url",

    token="my_api_key",

    options = [Headers=[#"Authorization"="Bearer " & token ]],

    result = Json.Document(Web.Contents(apiUrl , options))

in

    #"result"

唯一添加的是授权前的'#',然后是用双引号“授权”围绕授权。

【讨论】:

以上是关于仅当提供 Web API 密钥名称时才能指定 Web API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

将对象绑定到 Web API 端点时指定自定义属性名称

仅当特定密钥对值与可迭代匹配时,才在 JSON 对象中获取多个 JSON 密钥对值

在 ASP.NET Core Web API 的已注册 .NET 数据提供程序列表中找不到指定的不变名称“System.Data.sqlClient”

仅当使用列列表并且 IDENTITY_INSERT 为 ON [重复] 时,才能指定表“客户”中标识列的显式值

ASP Web API:将对象序列化为 JSON 时指定自定义字段名称

使用指定的客户端密钥设计 API