【发布时间】:2016-08-23 22:17:24
【问题描述】:
Angular 2 服务调用 ASP.NET Core 1.0 Web API 控制器类,但我收到此错误:
card.service.ts: Angular 2 代码。这在http://localhost:3000 上运行。我怀疑这里有问题。
import { Injectable } from 'angular2/core';
import { Http, Response } from 'angular2/http';
import { Observable } from 'rxjs/Observable';
import { ICard } from './card';
@Injectable()
export class CardService {
constructor(private _http: Http) { }
getCards(): Observable<ICard[]> {
return this._http.get('http://localhost:8462/api/card')
.map((response: Response) => <ICard[]>response.json())
.do(data => console.log("getCards: " + JSON.stringify(data)))
.catch(this.handleError);
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error')
}
}
Startup.cs: ASP.NET Core 代码。在http://localhost:8462 上运行。我相信解决方法是将 CORS 添加到我的 Startup.cs 文件中。我尝试关注ASP.NET docs on CORS,以及许多其他 CORS 指南,但都没有成功。
public void ConfigureServices(IServiceCollection services)
services.AddMvc();
services.AddCors();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseIISPlatformHandler();
app.UseApplicationInsightsExceptionTelemetry();
app.StaticFiles();
app.UseCors(builder =>
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
);
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
【问题讨论】:
-
嗯,我刚试过,对我来说效果很好。你能展示你如何调用网络服务吗?你能在没有 Angular 2 的
http库的情况下尝试它吗(过去被证明有点奇怪);类似fetch('http://localhost:8462/api/card', { mode: 'cors' })。此外,检查网络选项卡以查看服务是否实际发送任何与 CORS 相关的标头。另外,您在哪个版本的 ASP.NET Core 上运行?这是 RC1 还是您正在运行一些开发版本(我现在只测试了后者)?您是通过 IIS 运行它,还是直接从命令行使用 Kestrel? -
我使用 Fiddler 进行了同样的调用。遇到类似的 401 错误。我在 ASP.NET RC1 上运行。我通过 IIS 运行它。
标签: asp.net-web-api angular cors asp.net-core asp.net-core-mvc