c# - 即使服务器端允许本地地址,CORS 也会阻止访问
问题描述
我有一个使用实体框架驱动的 ASP.NET 服务器的 Angular 页面。Angular 和 ASP.NET 应用程序都在不同的本地地址上运行。为了防止 CORS 错误,我在服务器端配置了一些设置。
在 ASP.NET 方面,在WebApiConfig.cs中,我已经启用了来自 Angular 本地地址的所有访问权限;
config.EnableCors(new EnableCorsAttribute("http://localhost:4200", headers: "*", methods: "*"));
但是,当我尝试从 Angular 页面编辑值时,我仍然遇到 CORS 错误。
Access to XMLHttpRequest at 'http://localhost:62677/Assets/Edit/177738ba-16cd-4b08-b339-974f0547e626' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
将新值插入数据库或从数据库中获取所有值都可以正常工作而不会出现 CORS 错误,但编辑现有值会出错。
我尝试在WebApiConfig.cs中的上述代码处添加断点并对其进行调试,但是从未到达代码行。
任何帮助表示赞赏,谢谢
另外:我的Web.config文件中还有以下配置;
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
实施 Shyam Vemula 的解决方案后的新错误:
Access to XMLHttpRequest at 'http://localhost:62677/Assets/Edit/177738ba-16cd-4b08-b339-974f0547e626' from origin 'http://localhost:4200' has been blocked by CORS policy: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
解决方案
试试这个。将以下内容添加到Global.asmx
void Application_BeginRequest(object sender, EventArgs e)
{
var context = HttpContext.Current;
var response = context.Response;
// enable CORS
response.AddHeader("Access-Control-Allow-Origin", "*");
if (context.Request.HttpMethod == "OPTIONS")
{
response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS");
response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
response.End();
}
}
并从Web.config
文件中删除
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
推荐阅读
- r - 如何在情绪分析期间应用 ggplot,如 Silge 等人的 Jane Austin 示例
- opencart - 仅当优惠券代码有效时才接受 Opencart 中的订单
- java - 具有最大长度的大写字母数字正则表达式
- javascript - Scroll.top 返回 0 但我可以在元素中滚动
- javascript - 使用多个 .env 文件是不好的做法吗?
- python - 使用 Pyrebase 从 Firebase 返回的数据类型
- kubernetes - SinkBinding 注入 K_SINK 环境变量失败
- javascript - 使用 cypress,我想获取代码中匹配接口的数量以及匹配此路由的响应数量
- linux - GNU 查找,保持 {} 与 -exec 一样
- c# - 为什么 AsyncTaskMethodBuilder 在内部使用 Task 而不是 TaskCompletionSource