使用凭据启用 Cors .web api core 1.1

Posted

技术标签:

【中文标题】使用凭据启用 Cors .web api core 1.1【英文标题】:Enable Cors .web api core 1.1 with credentials 【发布时间】:2018-02-21 21:41:29 【问题描述】:

我正在使用 web api core 1.1 和 angular 2。 我对每个 HTTP 请求都使用令牌和 https 等凭据。在 Internet Explorer 中启动时一切正常,但在使用 chrome 和 firefox 时,获取我的凭据和 Http 请求时出错。有人能告诉我为什么我会出错吗?谢谢

public void ConfigureServices(IServiceCollection services)

    ...
    services.AddCors(opt =>
    
       opt.AddPolicy("MyCorsPolicy", builder =>
           builder.AllowAnyOrigin()
           .AllowAnyMethod()
           .AllowAnyHeader()
           .AllowCredentials());
    );
    services.AddMvc();
    ...



public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

   ...
   app.UseCors("MyCorsPolicy");
   app.UseMvc();
   ...

我的 ng2 代码:

import Injectable, OnInit from '@angular/core'
import Headers, Http, Response from '@angular/http';
import Observable from 'rxjs/Observable';


@Injectable()
export class MyApiCallService implements OnInit

constructor(private http: Http)  

ngOnInit() 
   this.fetchCredentials
       .subscribe(c => this.token = c
        ,error =>  console.log(error) );

private fetchCredentials(): Observable<any> 

    var apiUrl = 'http://localhost:2762/api/someEndpoint';
    return this.http.get(apiUrl, withCredentials: true )
               .map(response => response.json())
               .catch(this.handleError);
    


【问题讨论】:

【参考方案1】:

默认情况下,它将清除所有自定义标头。

你必须使用WithExposedHeaders("HeaderName")

例如:

        app.UseCors(options =>
    
        options.AllowAnyHeader();
        options.WithExposedHeaders("X-Pagination");
        options.AllowAnyOrigin();
        options.AllowAnyMethod();
    );

因此,当您从客户端进行 HTTP 调用时,您将能够看到您的标头。

【讨论】:

以上是关于使用凭据启用 Cors .web api core 1.1的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET Core Web API 上为 CORS 启用 OPTIONS 标头

在 Web Api Core 1.1 中启用 Cors

在 asp net core web api v3.0 中启用 CORS 的问题

在 Web API Core 和 Angular JS 中启用 CORS

无法在 ASP.Net Core Web api 中启用 CORS

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求