Как передать пользовательский заголовок из клиента React JS в концентратор SignalR? - PullRequest
0 голосов
/ 22 января 2019

Я устанавливаю новое приложение реакции SignalR ("@ aspnet / signalr") с Dot Net Core 2.0. Я хочу отправить пользовательские заголовки в запрос согласования концентратора SignalR (например, request.headers ["MyHeader"] = "Header").

Я могу подключиться к концентратору и получить данные для реагирования приложения. Я попытался установить пользовательский заголовок, пытаясь перезаписать httpClient в параметрах, передаваемых «withUrl».

С кодом, приведенным здесь, я получаю сообщение об ошибке: «Ошибка: не удалось завершить согласование с сервером: Ошибка: неожиданный код состояния, возвращенный из согласования, неопределен» *

Соединяется, когда httpClient удаляется из опций.

import { HubConnectionBuilder } from '@aspnet/signalr';


const options = {
  accessTokenFactory: () => {
    return "jwt token";
  },
  httpClient: {
    post: (url, httpOptions) => {

      httpOptions.headers = {
        ...httpOptions.headers,
        MyHeader: "NewHeader"
      };
      httpOptions.method = "POST";
      httpOptions.url = url;

      return httpOptions;
    }
  }
};

const connection = new HubConnectionBuilder()
   .withUrl("https://localhost:5001/chatHub", options)
   .build();

connection.start().catch(function(err) {
   console.log("Error on Start : ", err);
});

То, как я вижу заголовок как "Authorize": "токен jwt", я ожидаю увидеть другой заголовок в запросе "https://localhost:5001/chatHub/negotiate" как" MyHeader ":" NewHeader "

1 Ответ

0 голосов
/ 22 января 2019

Найден ответ на этот вопрос.

httpClient.post перезаписывает ответ по умолчанию SignalR httpClient.post.

Сработало обновление до httpClient.

  httpClient: {
    post: (url, httpOptions) => {
      const headers = {
        ...httpOptions.headers,
        MyHeader: "MyHeader"
      };

      return axios.post(url, {}, { headers }).then(response => {
        return (newResponse = {
          statusCode: response.status,
          statusText: response.statusText,
          content: JSON.stringify(response.data)
        });
      });
    }
  }

SignalR "вести переговоры "ожидает ответа в этой форме.

{
    statusCode: 200,
    statusText: "ok",
    content: "<string response>"
}
...