首页 > 解决方案 > 即使服务器端允许本地地址,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.

标签: c#asp.netangularentity-framework

解决方案


试试这个。将以下内容添加到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" />

推荐阅读