C# 在ASP.NET中,对飞行前请求的响应不';t通过访问控制检查:否';访问控制允许原点';标题

C# 在ASP.NET中,对飞行前请求的响应不';t通过访问控制检查:否';访问控制允许原点';标题,c#,asp.net,asp.net-core-webapi,preflight,C#,Asp.net,Asp.net Core Webapi,Preflight,我正在使用一个Web核心API,并已按如下方式设置CORS public void ConfigureServices(IServiceCollection services) { services.AddCors(); ... } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

我正在使用一个Web核心API,并已按如下方式设置CORS

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
var url = Configuration["origenUrl"];
            var header = "Content-Type";
            app.UseCors(
                options => options.WithOrigins(url).WithHeaders(header).AllowAnyMethod().AllowCredentials()
            );
        }
此设置适用于Get请求。 但是为了我的请求

   $.ajax({
        url: url,
        method: "PUT",
        xhrFields: { withCredentials: true }
    })
        .done(callback)
        //.fail(errorMessage);
        .fail(function (jqXHR, textStatus, errorThrown) {
            alert("Something went wrong: " + textStatus + " " + errorThrown);
            errorCallback();
        });
我得到这个错误信息

无法加载XMLHttpRequest

对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为401

从Fiddler我的http请求是

选项HTTP/1.1

接受:/

来源:

访问控制请求方法:PUT

访问控制请求头:接受

UA-CPU:AMD64

接受编码:gzip,deflate

用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64;Trident/7.0;rv:11.0)类似Gecko

主机:本地主机:17972

内容长度:0

DNT:1

连接:保持活力

Pragma:没有缓存

那么我该如何解决这个问题呢

编辑 我也尝试过这个代码只是为了让它工作,但我得到了同样的错误

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            //var url = Configuration["originUrl"];
            //app.UseCors(
            //    options => options.WithOrigins(url).AllowAnyHeader().AllowAnyMethod().AllowCredentials()
            //);
            app.UseCors(
                options => options.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials()
            );
            app.UseMvc();
}

尝试使用AllowAnyHeader而不是Headers,它必须有效。 问题是您需要一个“Content-Type”头,但没有被发送。 如果要保持WithHeaders检查,请添加“访问控制请求方法”


更多信息:

我知道这有点陈旧,但我只是遇到了同样的问题,并且能够解决这个问题。我遵循的是微软关于如何在全球范围内启用CORS的指南。我在Startup.cs文件中设置了以下代码

services.AddCors(options =>
{
    options.AddPolicy(MyAllowSpecificOrigins,
        builder =>
        {
            builder.WithOrigins("http://localhost");
        });
});
指南中确实有一个使用本地主机的示例,但是它位于“testcors”部分的末尾。在这里,它们显示您还必须有端口号。 我将代码更改为:

services.AddCors(options =>
{
    options.AddPolicy(MyAllowSpecificOrigins,
        builder =>
        {
            builder.WithOrigins("http://localhost:3000")
                .AllowAnyHeader();
        });
});
我还添加了AllowAnyHeader(如上所述),一切都很好!
HTH

我遇到了一个类似的问题,GET请求可以正常工作,但是POST请求会给我与OP-GET相同的愤怒信息。 下面的代码适用于我,其他答案在我的案例中并不完整:

public void配置服务(IServiceCollection服务)
{
services.AddCors(选项=>
{
options.AddDefaultPolicy(
生成器=>
{
建筑商。来源(“http://localhost:1337")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
services.AddControllers();
services.AddRazorPages();
}}

是否添加了内容类型?我将“content type”放在header变量中,该变量随后包含在WithHeaders方法中,如代码中所示。后来我尝试了“AnyHeader()”,结果也一样。对不起,我没有解释,因为我是在谈论这个请求。您有原始HTTP请求吗?来自Fiddler:OPTIONS HTTP/1.1 Accept:/Origin:Access Control请求方法:放置访问控制请求头:Accept UA-CPU:AMD64 Accept Encoding:gzip,deflate用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64;Trident/7.0;rv:11.0)像Gecko主机:localhost:17972内容长度:0 DNT:1连接:保持活动Pragma:no cache我试过了,但没用。一段时间以来,我一直在看这个链接——这是一个很好的链接——试图找出我能做什么。你也可以避免使用库,并在web.config中添加cors规则:为了尝试让它工作,我现在使用AllowAnyOrigin(),但这并不能解决问题仍然是同样的问题吗?你能用新代码更新你的问题吗?