无法使CORS适用于ASP.NET Core Web API

时间:2018-03-10 09:25:07

标签: c# asp.net-core cors

我有两个本地运行的应用程序。一个是提供JSON响应的ASP.NET核心Web API(http://localhost:8081)。另一个是调用API的Javascript应用程序(http://localhost:8080)。我正在测试的API端点是一个POST请求,我已经向Fiddler确认此端点正在运行。

当我在Chrome中使用我的Javascript应用发出POST请求时,我看到了以下错误:

  

无法加载http://localhost:8081/api/search:对预检的响应   请求未通过访问控制检查:否   '访问控制允许来源'标题出现在请求的上   资源。起源' http://localhost:8080'因此是不允许的   访问。

但是,这是我的API Exception calling "Substring" with "2" argument(s): "Length cannot be less than zero. Parameter name: length" At line:4 char:1 + $leftPart = $s.Substring(0, $pos) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentOutOfRangeException 的全部内容:

Startup

我已经关注了Microsoft docs,所以我不确定我错过了什么。

以下是我在Fiddler中从此端点获得的原始响应:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvcCore()
        .AddJsonFormatters()
        .AddCors(options =>
        {
            options.AddPolicy("DefaultCorsPolicy",
                builder => builder
                    .WithOrigins("http://localhost:8080")
                    .AllowAnyMethod());
        });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors("DefaultCorsPolicy");

    app.UseMvc();
}

如您所见,没有HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Server: Kestrel X-Powered-By: ASP.NET Date: Sat, 10 Mar 2018 09:23:46 GMT Content-Length: 37 [{"id":1,"name":"lorem ipsum dolor"}] 标题。

1 个答案:

答案 0 :(得分:1)

您可以尝试在services.UseCors()调用中配置CORS选项,而不是services.AddCors()。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
    services.AddMvcCore();
    ...
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(builder => builder
        .WithOrigins("http://localhost:8000")
        .AllowAnyHeader()
        .AllowAnyMethod()
    );

    app.UseMvcCore();
    ...
}
  

注意:通过清除客户端缓存(如果有)来测试它。在Chrome上> F12>网络标签>勾选禁用缓存复选框>刷新页面。