Как узнать IP-адрес клиентского компьютера при настройке основного контроллера angular + .Net? - PullRequest
0 голосов
/ 21 февраля 2019

Я занимаюсь разработкой приложения Angular и использую Asp .Net Core в бэкэнде.Я хочу знать IP клиентского компьютера, на котором запущен браузер на уровне контроллера.Поэтому, когда запрос переходит из браузера в бэкэнд, он направляется через прокси-файл, как показано ниже.

{
  "/shell/api": {
    "target": "http://<server-name>:1000",
    "secure": false,
    "pathRewrite": {
      "^/shell": ""
    },
  }
}

Из службы Angular я вызываю сервер следующим образом.

loadData() {
    return this._http.get('shell/api/get/data')
        .map(res => res.json());
    }

В контроллере,Я ожидаю, что IP-адрес в нижеприведенном объекте.

HttpContext.Connection.RemoteIpAddress

Теперь браузер отправляет запрос, угловой получает его, отправляет через прокси-контроллер на контроллер.Из-за прокси я получаю IP-адрес сервера в контроллере.

Есть ли способ получить IP-адрес клиента в этом сценарии?

1 Ответ

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

Возможно, вы можете добавить IP-адрес клиента для каждого запроса, который вы делаете на сервер.

Если вы хотите получить IP-адрес клиента в пользовательском интерфейсе, вы можете использовать следующий код.

const findIP = new Promise(r => {
      const w = window;
      const a = new (w['RTCPeerConnection'] || w['mozRTCPeerConnection'] || w['webkitRTCPeerConnection'])({ iceServers: [] });
      const b = () => { };
      a.createDataChannel('');
      a.createOffer(c => a.setLocalDescription(c, b, b), b);
      a.onicecandidate = c => {
        try {
          console.log(c);
          if (c.candidate) {
            c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)
          }
        } catch (e) {
          console.log(e);
        }
      };
    }
    );
    findIP.then(ip => {
      this.ip = ip;
    }).catch(e => console.error(e));
...