使用凭据启用 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 标头
在 asp net core web api v3.0 中启用 CORS 的问题
在 Web API Core 和 Angular JS 中启用 CORS