Javascript Angular 2调用ASP.NET WebAPI
我试图使用Angular调用WebAPI,但遇到了凭证未授权问题。它在IE中工作正常,但在Chrome和FF(401未经授权)中,凭据不会转发 我认为解决方案是在Angular中向调用中添加默认凭据,但我不确定如何做,或者可能有其他解决方案 有棱角的叫声Javascript Angular 2调用ASP.NET WebAPI,javascript,c#,asp.net,angularjs,asp.net-web-api,Javascript,C#,Asp.net,Angularjs,Asp.net Web Api,我试图使用Angular调用WebAPI,但遇到了凭证未授权问题。它在IE中工作正常,但在Chrome和FF(401未经授权)中,凭据不会转发 我认为解决方案是在Angular中向调用中添加默认凭据,但我不确定如何做,或者可能有其他解决方案 有棱角的叫声 import {Http} from 'angular2/http'; import {Injectable} from 'angular2/core'; import 'rxjs/Rx'; @Injectable() export clas
import {Http} from 'angular2/http';
import {Injectable} from 'angular2/core';
import 'rxjs/Rx';
@Injectable()
export class MyListService{
constructor(private _http: Http) { }
getMyList() {
//return an observable
return this._http.get('http:////localhost:2311/api/MyListApi')
.map((response) => {
return response.json();
});
//.retry(3);
}
}
您可以这样尝试:
return this._http.get('http:////localhost:2311/api/MyListApi', {
credentials: RequestCredentialsOpts.Include
}).map((response) => {
return response.json();
});
}
看起来像是Angular2的近作。您也可以查看答案。我也有这个问题。我的Angular2-rc4应用程序在另一个域上调用.NET Core 1.0.0 WebAPI应用程序。。张贴此信息,以防对他人有所帮助 正如其他人所提到的,在Angular2中,pass with Credentials true:
getUser() {
return this.http.get(this._apiUrl + "/account/GetUser", { withCredentials: true })
.toPromise()
.then(response => response.json().data)
.catch(this.handleError);
}
在WebAPI项目中,您可以在Startup.cs(而不是web.config)中设置CORS策略:
当然,根据应用程序的需要设置策略,这只允许进行所有测试。示例和官方.NET核心文档提供了更多详细信息。看起来您只能在中指定url、方法、搜索、标题和正文。我正在我的环境中运行angular2 2.0.0-beta.17。我不可能是唯一一个有这个问题的人?嗯,你检查过了吗:也许可以给你一些帮助。最近打过补丁,所以你可以使用withCredentials,在通话中是真的。如果在不同的服务器/端口上运行,请注意CORS需求
public void ConfigureServices(IServiceCollection services)
{
var corsBuilder = new CorsPolicyBuilder();
corsBuilder.AllowAnyHeader();
corsBuilder.AllowAnyMethod();
corsBuilder.AllowAnyOrigin();
corsBuilder.AllowCredentials();
services.AddCors(options =>
{
options.AddPolicy("AllowAll", corsBuilder.Build());
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors("AllowAll");
}