Заголовок авторизации C# HttpClient удален после отправки на серверC#

Место общения программистов C#
Ответить
Anonymous
 Заголовок авторизации C# HttpClient удален после отправки на сервер

Сообщение Anonymous »

Я хочу отправить запрос к внешнему API через HttpClient из моего собственного API на C#.
Я использую 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);
Обычно я отправляю http-запрос следующим образом.
но теперь у меня возникла проблема.
После строки ответа 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)
};
Теперь я получил ошибку перенаправления 301 (навсегда перемещено).
Я решил протестировать код в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»