Asp.net Core允许使用带有CORS的自定义标头(客户端具有axios)

时间:2019-06-18 21:10:50

标签: asp.net-core cors axios asp.net-core-webapi

我在客户端和Asp.net Core Web Api服务器端都有一个应用程序(在Vuejs中)+ axios。 我添加了jwt令牌身份验证。我已将服务器配置为在令牌过期时添加自定义标头。 (响应中有“令牌已过期”标头)。

axios拦截器的error.response.headers对象中不存在标头“令牌已过期” ...(注意:这很令人沮丧,因为标头存在于Postman上,而与axios无关)。

编辑:github上的这个问题与我的案例https://github.com/axios/axios/issues/606

相似

1 个答案:

答案 0 :(得分:1)

默认情况下,浏览器不会将所有响应标头公开给应用程序。有关更多信息,请参见W3C Cross-Origin Resource Sharing (Terminology): Simple Response Header

默认情况下可用的响应头是:

  • 缓存控制
  • 内容语言
  • 内容类型
  • 过期最后修改
  • 编译指示

来源:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2#set-the-exposed-response-headers

更多一般信息:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

要使其他标头可用于该应用程序,请在启动时配置中调用WithExposedHeaders方法。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   // ...

   app.UseCors(builder =>
   {
      builder.WithOrigins("http://localhost:8080");
      builder.AllowAnyHeader();
      builder.WithExposedHeaders("Token-Expired");
      builder.AllowAnyMethod();
      builder.AllowCredentials();
      builder.Build();
   });
}

注意:您必须设置一个特定的原点(而不添加AllowAnyOrigin()方法)。 实际上,CORS规范还指出,如果存在Access-Control-Allow-Credentials标头,则将原点设置为“ *”(所有原点)是无效的。

Etvoilà:)