我有一个aspnetcore web api,由一个在本地工作正常的angularjs应用程序调用。我启用了CORS,因为这是我现在可以让客户端使用API的唯一方法(这似乎有意义,我现在需要担心其他事情。)
今天升级到aspnetcore 2.0之后(因为它有一些我真正可以使用的功能)我现在只是得到了我在启用CORS之前得到的相同错误:
请求的资源上没有'Access-Control-Allow-Origin'标头。
我已将所有dotnetcore软件包升级到2.0版(包括Microsoft.AspNetCore.Cors)。
值得注意的是,我没有对我的启动或配置代码进行任何更改,如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseMvc();
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<Models.SmtpConfig>(Configuration.GetSection("Smtp"));
services.AddCors();
services.AddMvc();
}
如前所述,aspnetcore 1.1和FYI一切正常,我计划在生产中限制CORS,因此它只接受来自给定子域的调用,但目前还有一段时间。
答案 0 :(得分:3)
我不确定回答这个问题是否正确,但我会说明问题是什么(基本上是我自己的愚蠢)......
感谢Poke对我原始问题的评论,我开始深入挖掘并添加更多断点(我应该先做的事情)并发现它实际上是代码中的问题(我删除了一行在启动期间注入命令及其处理程序的代码,因此DI代码中存在运行时错误,其副作用是未在响应上设置标题。
不确定为什么调试器没有像之前那样抛出错误,所以对我来说,如果我在浏览器三重检查中看到CORS错误,那么它首先不是500服务器错误。