ServiceStack-无法从Typescript客户端ResponseFilter中获取标头

时间:2019-05-12 15:59:24

标签: typescript http-headers servicestack fetch-api

我设置了一个在ServiceStack上运行的port 5001应用程序

使用ServiceStack的打字稿客户端(使用typescript-ref),我生成了dtos

我需要拦截响应,因为有时我的服务器会将客户端重定向到另一个页面。但是我无法使用标准XHR重定向来做到这一点,我需要使用HTTP拦截器(类似于angular的拦截器)来实现

我设置了一个有角度的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"}}
 }
 // ...

我可以成功在浏览器控制台上看到标头返回

当我检查“获取响应”标头时,我仅看到Content-Type作为标头,并且状态代码为200

如何添加一个ResponseFilter来捕获实际的GET / POST / PUT / DELETE请求?

1 个答案:

答案 0 :(得分:2)

我需要在cors功能中公开“ X-Navigate-To”标题

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