无法在 ASP.NET Core 1.0 中启用跨域请求 (CORS)

Posted

技术标签:

【中文标题】无法在 ASP.NET Core 1.0 中启用跨域请求 (CORS)【英文标题】:Can't enable Cross-Origin Requests (CORS) in ASP.NET Core 1.0 【发布时间】: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 运行它。 【参考方案1】:

我想我明白了。当我第一次执行文件 > 新项目时,我选择了 Windows 身份验证。看起来这就是导致错误的原因。

我通过使用 Windows 身份验证创建一个新项目并将 CORS 添加到 Startup.cs 来对其进行测试。得到同样的错误。当我创建一个没有 Windows 身份验证的新项目并添加 CORS 时没有收到错误。

【讨论】:

【参考方案2】:

我也有同样的问题。我的诀窍是将“UseCors..”放在“UseMvc()”之前:-)

【讨论】:

以上是关于无法在 ASP.NET Core 1.0 中启用跨域请求 (CORS)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 中启用 CORS

无法在 ASP.Net Core Web api 中启用 CORS

ASP.NET Core 1.0 部署 HTTPS

ASP.NET Core Cors 已启用但无法正常工作

无法在面向 netcoreapp3.0 的 ASP.NET Core WebApp 中为特定 API 控制器启用 CORS

在 ASP.NET Webforms 中启用跨域请求