我有一个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
答案 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();
}