You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Angular中HttpClientXsrfModule配置的XSRF参数?

在Angular中获取HttpClientXsrfModule的自定义配置值

在Angular中配置XSRF防护时,可通过HttpClientXsrfModule.withOptions指定自定义Cookie与请求头名称,示例代码如下:

imports: [
  HttpClientModule,
  HttpClientXsrfModule.withOptions({
    cookieName: 'My-Xsrf-Cookie',
    headerName: 'My-Xsrf-Header',
  }),
],

很多开发者会有疑问:后续在自定义服务、拦截器或组件中,能不能直接获取这些配置好的值?

查看Angular源码会发现,xsrf.ts文件里定义了XSRF_COOKIE_NAME和XSRF_HEADER_NAME两个注入令牌,但直接尝试导入注入时会报错:

import { XSRF_HEADER_NAME } from '@angular/common/http'; // ERROR: Module "@angular/common/http" has no exported member 'XSRF_HEADER_NAME'.ts(2305)
import { Inject, Injectable } from '@angular/core';

@Injectable()
export class MyService {
  public constructor(
    @Inject(XSRF_HEADER_NAME) private readonly _xsrfHeaderName: string,
  ) {}
}

这是因为这两个注入令牌属于Angular的内部API,并没有对外公开导出,所以无法通过@angular/common/http直接导入使用。

目前Angular官方并没有提供直接获取这些配置值的公开API,不过可以通过以下两种方式实现需求:

  • 复用共享配置对象
    提前定义一个共享的配置对象,在HttpClientXsrfModule.withOptions和需要使用配置的服务/组件中同时引用,避免重复定义:

    // 定义共享的XSRF配置
    export const XSRF_CONFIG = {
      cookieName: 'My-Xsrf-Cookie',
      headerName: 'My-Xsrf-Header',
    };
    
    // 在模块配置中使用
    imports: [
      HttpClientModule,
      HttpClientXsrfModule.withOptions(XSRF_CONFIG),
    ],
    
    // 在自定义服务中直接使用
    @Injectable()
    export class MyService {
      readonly xsrfCookieName = XSRF_CONFIG.cookieName;
      readonly xsrfHeaderName = XSRF_CONFIG.headerName;
    }
    
  • 自定义注入令牌
    如果需要通过依赖注入的方式获取配置值,可以创建自定义的注入令牌,并在模块中提供对应的配置值:

    import { InjectionToken, NgModule } from '@angular/core';
    import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
    
    // 定义自定义注入令牌
    export const XSRF_COOKIE_NAME = new InjectionToken<string>('XSRF_COOKIE_NAME');
    export const XSRF_HEADER_NAME = new InjectionToken<string>('XSRF_HEADER_NAME');
    
    // 定义XSRF配置
    const xsrfConfig = {
      cookieName: 'My-Xsrf-Cookie',
      headerName: 'My-Xsrf-Header',
    };
    
    @NgModule({
      imports: [
        HttpClientModule,
        HttpClientXsrfModule.withOptions(xsrfConfig),
      ],
      providers: [
        { provide: XSRF_COOKIE_NAME, useValue: xsrfConfig.cookieName },
        { provide: XSRF_HEADER_NAME, useValue: xsrfConfig.headerName },
      ],
    })
    export class AppModule {}
    
    // 在自定义服务中注入使用
    import { Inject, Injectable } from '@angular/core';
    
    @Injectable()
    export class MyService {
      constructor(
        @Inject(XSRF_COOKIE_NAME) private readonly xsrfCookieName: string,
        @Inject(XSRF_HEADER_NAME) private readonly xsrfHeaderName: string
      ) {}
    }
    

内容的提问来源于stack exchange,提问作者yohny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:25:28