ServiceStack - не удается получить заголовки в клиенте Typescript ResponseFilter - PullRequest
2 голосов
/ 12 мая 2019

Я установил ServiceStack приложение, работающее на port 5001

Используя клиент машинописи для ServiceStack (используя typescript-ref), я сгенерировал dtos

Мне нужно перехватить ответы, потому что иногда мой сервер перенаправляет клиента на другую страницу. Но я не могу сделать это со стандартными перенаправлениями XHR, мне нужно сделать это с перехватчиком HTTP (аналогично угловому)

Я настроил угловой JsonServiceClient

import { Injectable } from '@angular/core';
import { JsonServiceClient } from '@servicestack/client';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root',
})
export class ServiceClient extends JsonServiceClient {
  constructor(router: Router) {
    super('https://localhost:5001');
    this.responseFilter = res => {
      const navigateTo = res.headers.get('X-Navigate-To');
      if (!navigateTo) {
        return;
      }
      router.navigateByUrl(navigateTo);
    };
  }
}

// client.responseFilter is triggered successfully, but the Response.headers does not contain the headers sent by the service. Only `content-type: application-json`

В моем сервисе я добавляю заголовок запроса

 // ...
 return new HttpResponse(HttpStatusCode.NoContent){
    Headers = {{"X-Navigate-To", "/home/whathever"}}
 }
 // ...

Я успешно вижу заголовок, возвращаемый на консоли браузера

Когда я проверяю заголовки Fetch Response, я вижу только Content-Type в качестве заголовков и код состояния 200

Как добавить фильтр ResponseFilter, который будет захватывать фактические запросы GET / POST / PUT / DELETE?

1 Ответ

2 голосов
/ 12 мая 2019

Мне нужно было выставить заголовок "X-Navigate-To" в функции cors

        appHost.LoadPlugin
        (
            new CorsFeature
            (
                allowCredentials: true,
                allowOriginWhitelist: new List<string> {"https://localhost:4200"},
                allowedHeaders: "Content-Type,Authorization",
                exposeHeaders: "X-Navigate-To"
            )
        );
...