想用CORS解决一个问题我想我已经试过所有的方法...但都不管用
我用react + .net 6
.net应用程序中launchSettings.json中的配置文件部分
"profiles": {
"FlightArrivalsStat.API": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:5001;http://localhost:5144",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
在programm.cs中,我添加了
builder.Services.AddCors(p => p.AddPolicy("corsapp", builder =>
{
builder.WithOrigins("*").AllowAnyMethod().AllowAnyHeader();
}));
在react应用程序中,我尝试同时使用一种和所有方法:
使用craco:
devServer: {
historyApiFallback: true,
hot: true,
port: 3000,
headers: {
"Access-Control-Allow-Origin": "*"
},
proxy: {
'/api/**' :{
target: 'http://localhost:5144',
pathRewrite: { '^/api': '' },
secure: false,
changeOrigin: true,
}
}
}
将"proxy": "http://localhost:5144"
添加到package.json
创建axios,如:
export default axios.create({
baseURL: "http://localhost:5144/api",
headers: {
"Content-type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS"
}
});
要求很简单:
await axios.get<ArrivalArray>('schedule', {params});
在浏览器控制台中,我在所有情况下都会收到以下消息:
访问位于“http://localhost:5144/api/schedule?station=DME&date=2023-08-22T09:26:55.437Z&range=60' from origin ' http://localhost:3000 ' has been blocked by CORS policy:对印前检查请求的响应未通过访问控制检查:预检请求不允许重定向。
同样的问题,https...在谷歌上搜索了大量的信息后,我能问一下,我做错了什么,错过了什么?
1条答案
按热度按时间vom3gejh1#
同样的问题,https...在谷歌上搜索了大量的信息后,我能问一下,我做错了什么,错过了什么?
根据您的场景和配置,您的客户端配置似乎是正确的。除此之外,预检请求失败可能由几个原因引起,例如,如果请求URL包含任何尾随斜杠
/
,而不是您的电子邮件源或URL?假设你的目标是http://localhost:5144/login
,但在你的请求中,它的传递方式就像http://localhost:5144/login/
可以导致CORS一样。请仔细检查一下。另一个重要的问题是,你的控制器怎么样?它有没有CORS属性在上面?例如[EnableCors(“您的CORS策略名称”)],
此外,请在launchsettings.json文件中将以下属性设置为true,以便相应地响应预检请求。
后端CORS配置:
使用中间件参考:
设置控制器CORS属性:
您可以使用已创建的CORS策略属性启用控制器,如下所示:
替代方式:
注册中间件:
**注意:**CORS中间件配置请参考此官方文档,同时检查CORS的控制器属性