【发布时间】:2021-10-06 03:33:19
【问题描述】:
我正在尝试使用可以从外部 API 读取的 HTTPClient 创建一个 APIcontroller。当我通过链接访问 API 时,我得到了所需的响应,但是当我尝试从代码连接到它时,我得到一个未经授权的错误。 Bearer token 和 Basic 授权我都试过了。
这是一个返回正确响应的示例请求 URL: RequestURLWithAuthorizationHeader
这是我尝试过的代码。
[Route("api/[controller]")]
[ApiController]
public class FrostMetAPIController : ControllerBase
{
private readonly ILogger<FrostMetAPIController> _logger;
private readonly IHttpClientFactory _httpClientFactory;
private static readonly HttpClient _httpClient = new HttpClient
{
BaseAddress = new Uri("https://frost.met.no/observations/")
};
public FrostMetAPIController(ILogger<FrostMetAPIController> logger, IHttpClientFactory
httpClientFactory)
{
_logger = logger;
_httpClientFactory = httpClientFactory;
}
[HttpGet("values")]
public async Task<string> GetRates()
{
var httpClient = _httpClientFactory.CreateClient();
try
{
var _CredentialBase64 = "XXX-xxx-XXX-xxx";
var url = "sources=SN68290:0";
url += "&referencetime=2019-01-01T12:00:00.000Z/2020-06-30T23:59:59Z";
url += "&elements=wind_speed,%20max(wind_speed%20PT1H)";
url += "&timeoffsets=PT0H";
url += "&timeresolutions=PT1H";
url += "×eriesids=0";
url += "&performancecategories=C";
url += "&exposurecategories=2&levels=10.0";
url = url.Replace(" ", "%20");
_httpClient.DefaultRequestHeaders
.Accept
.Add(newMediaTypeWithQualityHeaderValue("application/json"));
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", $"Bearer {_CredentialBase64}");
var response = await _httpClient.GetAsync("v0.jsonld?" + url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
catch (Exception)
{
throw;
}
}
}
【问题讨论】:
-
404 未找到,未授权。哪一个?此外,发布的代码无法编译。此外,您正在混合
httpClient和_httpClient,这完全没有意义。 -
这是401未经授权的错误。我已经纠正了错误。代码现在正在编译,我已经更新了一行。
-
看起来像这样
https://xxx-xxx-xx-xx@frost.met.no/sources/v0.jsonld?types=SensorSystem&country=NO&fields=name,geometry,id),其中 xxx-xx-xxx 是授权密钥。 API 没有很好的文档记录,所以我自己尝试一下。 -
那么,如果您知道 URL 必须是这样的,那您究竟为什么不在代码中构建该 URL?您无法在任何地方添加密钥,您需要遵循 API 的预期
-
我确实在代码中构建了它,但仍然得到 401 Unauthorized 的相同响应。
标签: c# asp.net-core-webapi dotnet-httpclient asp.net-apicontroller asp.net-authorization