Javascript Angular 2调用ASP.NET WebAPI

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

我试图使用Angular调用WebAPI,但遇到了凭证未授权问题。它在IE中工作正常,但在Chrome和FF(401未经授权)中,凭据不会转发

我认为解决方案是在Angular中向调用中添加默认凭据,但我不确定如何做,或者可能有其他解决方案

有棱角的叫声

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");
}