Я использую 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);
но теперь у меня возникла проблема.
После строки ответа HttpResponseMessage = await client.SendAsync(requestMessage); заголовок авторизации удален из моего заголовка запроса, и я получил ошибку UnAuthorized HTTP.
Я знаю, что при перенаправлении заголовок авторизации удаляется по соображениям безопасности. Также я не уверен насчет перенаправления во внешнем API.
Я добавляю HttpClientHandler с AllowAutoRedirect = false в свой HttpClient
Код: Выделить всё
var handler = new HttpClientHandler()
{
AllowAutoRedirect = false,
};
var client = new HttpClient (handler)
{
BaseAddress = new Uri(baseUrl)
};
Я решил протестировать код в Postman. По умолчанию, когда я вызываю API в Postman, я получаю сообщение об ошибке HTTP 405, метод не разрешен, и подробные сведения об ошибке выглядят следующим образом:
{
"detail": "Метод "GET" не разрешен".
Внешний метод API – PUT. но здесь я получил ошибку GET.
Я попробовал много опций в почтальоне и, наконец, нашел опцию в Postman:

Когда я включаю его, внешний API работает правильно.
Также я тестирую его с Insomnia, и он работает правильно.
Связано ли это с моим кодом или dot net 5 или с чем-то еще в моем коде или с внешним API?
Если это связано с моим кодом, как я могу устранить ошибку?
Если ошибка связана с внешним API, почему ответ Postman и Insomnia в порядке?
У внешнего API есть основная политика для определенного домена, и я отправляю запрос из другого домена.
Все, что я знаю, это то, что политика CORS применяется в браузере. нет в Postman, Insomnia или C# Code.
А как насчет CORS? Связано ли это с CORS? если да, что мне делать?
Буду благодарен за ответ.
Обновить
В заголовке ответа я обнаружил WWW-Authenticate: JWT realm="api".
Что именно? и что мне делать?
Подробнее здесь: https://stackoverflow.com/questions/683 ... -to-server
Мобильная версия