在我的后端中,我在 .net 核心实体框架后端中使用 AspNetCoreRateLimit 包实现了 IpRateLimit 中间件。当 IP 地址 x 在特定时间进行 y 调用时,它会被阻塞一段时间,并且后端应该返回 429 错误,这在使用邮递员进行测试时可以正常工作。但是当我使用 axios 发出请求时,由于 ip 速率限制器应该被阻止,我收到 axios 错误:
"Access to XMLHttpRequest at 'https://localhost:44372/api/Users/Login/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource."
"POST https://localhost:44372/api/Users/Login/ net::ERR_FAILED"
收到此错误后,我添加了所需的标头,但并没有改变结果。对我的后端的其他 axios 请求(也包括发布、放置和删除)工作正常,但是当 IP 速率限制器命中时,我只是得到了 cors 错误。
我在我的应用程序中实现了限制器,如下面的教程: https ://edi.wang/post/2019/6/16/ip-rate-limit-for-aspnet-core
响应 axios 请求:
async function buildPostAndFetch(url, param, header) {
const finalurl = `${BASE_URL}${url}`;
return axios.post(finalurl, param, {headers:{"Access-Control-Allow-Origin": "*"}})
.then(res => {
response(res);
return res.data ? res.data : true;
})
.catch(err => {
handleError(err);
return false;
})
}
handleError() {
const handleError = err => {
setError(true);
if(err.request?.status === 0) {
console.log("*********************************************")
console.log(err.request);
console.log("*********************************************")
// throw new Error("API is currently offline or you are not connected to the internet:(");
} else if(err.response.status === 429) {
console.log("*********************************************")
console.log(err.response);
console.log("*********************************************")
}
}
}
当请求和限制器命中时,我总是进入 err.request.status === 0 路径。