Reactjs 删除时出现CORS错误

Reactjs 删除时出现CORS错误,reactjs,asp.net-web-api,cors,Reactjs,Asp.net Web Api,Cors,我有一个ReactJS/Redux应用程序调用.NETCore2.1WebAPI;一切都是本地的。我的React应用程序是,api是 我必须在.Net应用程序中启用CORS才能使GET呼叫正常工作,但无论我做什么,我都无法使删除正常工作 错误是: EC7120:[CORS]在“”处的跨源资源的访问控制允许源响应标头中,源“”未找到“”。 顺便说一句,我可以从下面(和上面)的console.log语句中获取输出,并在Postman中执行它。它工作得很好。我还在这里添加了“mode”和“header

我有一个ReactJS/Redux应用程序调用.NETCore2.1WebAPI;一切都是本地的。我的React应用程序是,api是

我必须在.Net应用程序中启用CORS才能使GET呼叫正常工作,但无论我做什么,我都无法使删除正常工作

错误是:

EC7120:[CORS]在“”处的跨源资源的访问控制允许源响应标头中,源“”未找到“”。

顺便说一句,我可以从下面(和上面)的console.log语句中获取输出,并在Postman中执行它。它工作得很好。我还在这里添加了“mode”和“headers”,试图让它正常工作

我的电话是这样的:

export const deleteLogsByGlobalId = (globalIds) => {
    console.log(apiLogsPath + createGlobalIdQueryString(globalIds));
    fetch(apiLogsPath + createGlobalIdQueryString(globalIds),
        {
            method: 'DELETE',
            mode: 'cors',
            headers: {
                'Access-Control-Allow-Origin': 'http://localhost:51666'
            },
        })
        .then(checkStatus)
        .catch((error) => console.log('Error from deleteLogsByGlobalId() => ' + error));
};
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();

            // app.UseCors(builder =>
            //             builder.WithOrigins("http://localhost:3000").AllowAnyHeader());

            // app.UseCors(builder =>
            //             builder.WithOrigins("http://localhost:3000"));

            app.UseCors(builder => builder.AllowAnyOrigin());
        }

        app.UseMvc();
        app.UseStaticFiles();
    }
api的Startup.cs中的Configure函数如下所示:

export const deleteLogsByGlobalId = (globalIds) => {
    console.log(apiLogsPath + createGlobalIdQueryString(globalIds));
    fetch(apiLogsPath + createGlobalIdQueryString(globalIds),
        {
            method: 'DELETE',
            mode: 'cors',
            headers: {
                'Access-Control-Allow-Origin': 'http://localhost:51666'
            },
        })
        .then(checkStatus)
        .catch((error) => console.log('Error from deleteLogsByGlobalId() => ' + error));
};
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();

            // app.UseCors(builder =>
            //             builder.WithOrigins("http://localhost:3000").AllowAnyHeader());

            // app.UseCors(builder =>
            //             builder.WithOrigins("http://localhost:3000"));

            app.UseCors(builder => builder.AllowAnyOrigin());
        }

        app.UseMvc();
        app.UseStaticFiles();
    }
你会看到,我尝试了一些不同的东西与建设者;即使AllowAnyOrigin也不起作用

我该如何解决这个问题

谢谢你的帮助


好的,算了。这就是解决办法。在fetch()调用中丢失头并在api上定义允许的方法

以下是可用的JavaScript:

export const deleteLogsByGlobalId = (globalIds) => {
    console.log(apiLogsPath + createGlobalIdQueryString(globalIds));
    fetch(apiLogsPath + createGlobalIdQueryString(globalIds),
        {
            method: 'DELETE',
        })
        .then(checkStatus)
        .catch((error) => console.log('Error from deleteLogsByGlobalId() => ' + error));
};
以及api中的配置函数:

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

        app.UseCors(builder =>
                    builder.WithOrigins("http://localhost:3000")
                    .WithMethods("GET", "POST", "DELETE"));
    }

    app.UseMvc();
    app.UseStaticFiles();
}

如果您查看开发人员工具的网络选项卡,是删除请求失败还是选项请求失败?@tholle问得好;请求得到200,但选项得到204。不过,我不知道该如何处理这些信息。选项的响应是204也没关系。浏览器不关心它是什么特定的2xx代码;也就是说,为了处理飞行前选项响应,浏览器对204(或200-209范围内的任何其他代码)的处理方式与对200的处理方式完全相同。当删除请求失败时,您应该更新问题以包含浏览器在devtools控制台中记录的确切错误消息。@sideshowbarker谢谢;完成了。