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

rdh*_*aut 2 cors asp.net-core axios asp.net-core-webapi

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

来自 axios 拦截器的 error.response.headers 对象中不存在标头“token-expired”......(注意:这是令人沮丧的,因为标头存在于 Postman 上但不存在于 axios 中)。

编辑:github 上的这个问题似乎与我的情况类似https://github.com/axios/axios/issues/606

rdh*_*aut 5

默认情况下,浏览器不会向应用公开所有响应标头。有关更多信息,请参阅W3C 跨域资源共享(术语):简单响应头

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

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

来源: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

要使应用程序可以使用其他标头,请在启动时调用 Configure 中的 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();
   });
}
Run Code Online (Sandbox Code Playgroud)

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

等等 :)