DELETE

时间:2018-08-02 22:57:50

标签: reactjs asp.net-web-api cors

我有一个ReactJS / Redux应用程序,它调用.Net Core 2.1 Web Api;一切都是本地的。我的React应用是http://localhost:3000,我的api是http://localhost:51666

我必须在.Net应用程序中启用CORS才能使GET调用正常工作,但是无论我做什么,我都无法使DELETE工作正常。

错误是:

EC7120:[CORS]起源'http://localhost:3000'在'{{的跨源资源的访问控制允许来源响应中没有找到'http://localhost:3000' 3}}”。

顺便说一句,我可以从下面(和上面)的console.log语句中获取输出,并在Postman中执行它。它运作完美。我还在此处添加了“模式”和“标题”,以使其正常工作。

我的呼叫看起来像这样:

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));
};

api的Startup.cs中的“我的配置”功能如下:

    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也无法使用。

我该如何解决?

感谢您的帮助。

V

1 个答案:

答案 0 :(得分:0)

好,知道了。这是解决方案。在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中的Configure函数:

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();
}