Пользовательские заголовки NETCore 3.1 PostAsync не работают

#asp.net-core #.net-core #asp.net-core-webapi

#asp.net-core #.net-ядро #asp.net-core-webapi

Вопрос:

У меня есть несколько служб RESTful, которые работают друг с другом. В одном сценарии я хочу отправить некоторые данные из одной службы в другую службу, и я хочу прикрепить некоторую информацию в заголовке запроса. Я видел несколько случаев для этого, и в конце концов я придумал этот обходной путь:

 var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(3);
var httpRequestMessage = new HttpRequestMessage {
    Method = HttpMethod.Post,
    RequestUri = new Uri(service2Address),
    Content = new StringContent(JsonConvert.SerializeObject(obj))
};

httpRequestMessage.Headers.Add("myCustomHeaderKey", "myCustomHeaderValue");

var response = await httpClient.SendAsync(httpRequestMessage);

var responseString = await response.Content.ReadAsStringAsync();
  

С этими строками кода Post запрос отправляется, но service2 когда я хочу получить заголовки из запроса, нет никаких признаков коллекции myCustomHeaderKey заголовков. Я проверяю Request.Headers в Visual Studio Watch и даже пытаюсь получить пользовательский заголовок Request.Headers["myCustomHeaderKey"] . Так что же здесь не так?

РЕДАКТИРОВАТЬ 1

Эта реализация основана на этом руководстве.

Комментарии:

1. Почему бы вам не добавить заголовок здесь; var httpRequestMessage = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri(service2Address), Content = new StringContent(JsonConvert.SerializeObject(obj)) };

2. Привет @CasperDijkstra, это не имеет никакого значения для вывода при добавлении заголовка при инициализации httpRequestMessage или после него.

Ответ №1:

Я разработал код, подобный вашему. Создали два Asp.net базовый проект 3.1 со стандартным шаблоном. Одна служба запускает localhost: 44320, а другая localhost: 44300 localhost: 44320 / PostService написала ваши коды.

Затем получите этот URL-адрес с помощью браузера. localhost: 44320 / прогноз погоды / функция IncomeService выглядит следующим образом

Наконец, я поставил точку останова туда, где получить заголовок запроса. Результат, как показано ниже

Это не проблема. Возможно, вы используете промежуточное программное обеспечение заголовка запроса на изменение. Или если вы используете что-то вроде nginx. возможно, эта проблема связана с конфигурацией nginx.