Ali*_*our 6 c# httpclient unauthorized basic-authentication www-authenticate
HttpClient我想通过我自己的 C# API向外部 API 发送请求。我正在使用 dot net 5 和基本身份验证。这是我的代码:
var client = new HttpClient
{
BaseAddress = new Uri(baseUrl)
};
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Put, "apiUrl");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var param = JsonConvert.SerializeObject(new
{
param1="",
param2=""
});
requestMessage.Content = new StringContent(param, Encoding.UTF8, "application/json");
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{user}:{pass}")));
HttpResponseMessage response = await client.SendAsync(requestMessage);
Run Code Online (Sandbox Code Playgroud)
通常,我像这样发送http请求。但现在我遇到了一些问题。
从我的请求标头中删除行授权标头后HttpResponseMessage response = await client.SendAsync(requestMessage);,我收到 UnAuthorized http 错误。
我知道,当发生重定向时,出于安全原因,授权标头被删除。我也不确定外部 API 中的重定向。
我将HttpClientHandlerwith添加AllowAutoRedirect = false到我的HttpClient
var handler = new HttpClientHandler()
{
AllowAutoRedirect = false,
};
var client = new HttpClient (handler)
{
BaseAddress = new Uri(baseUrl)
};
Run Code Online (Sandbox Code Playgroud)
现在我收到重定向错误 301(永久移动)。
我决定在 Postman 中测试代码。默认情况下,当我在 Postman 中调用 API 时,出现 http 错误 405 method not allowed 和如下错误详细信息:
{“detail”:“不允许方法“GET”。”}
外部API方法是PUT. 但这里我得到了GET错误。我在邮递员中尝试了很多选项,最后在邮递员中找到了该选项:

当我打开它时,外部 API 工作正常。我也对其进行了测试Insomnia,它工作正常。
它与我的代码或 dot net 5 或我的代码中的其他内容相关,或者与外部 API 相关吗?
如果与我的代码有关,我该如何解决该错误?
如果错误与外部 API 相关,为什么 Postman 和 Insomnia 响应正常?
外部 API 有针对特定域的核心策略,我从其他域发送请求。我只知道浏览器中应用了 CORS 策略。不在 Postman、Insomnia 或 C# 代码中。关于什么CORS?与 相关吗CORS?如果是,我该怎么办?
我将不胜感激您的答复。
更新
我WWW-Authenticate: JWT realm="api"在响应头中检测到。到底是什么?我该怎么办?
Ali*_*our 10
我找出问题所在了。实在是太可笑了。当我使用 URL 之类的www.abc.com/api/something请求时,会收到 301 错误,并且邮递员会发送另一个请求,例如www.abc.com/api/something/. 区别就/在于请求的末尾。我在邮递员中尝试了新的 URL,第一个请求正常。我还在我的 C# 代码中尝试了 URL,再次确定。但我不明白为什么。
非常感谢亲爱的@pharaz-fadaei
| 归档时间: |
|
| 查看次数: |
3901 次 |
| 最近记录: |