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