首页 > 解决方案 > 为什么当我从客户端发送请求时出现 CORS 策略错误?

问题描述

我从 Angular 项目向 web api .net cor 2.2 发送了请求。

我得到这个错误:

Access to XMLHttpRequest at 'http://localhost/fridge/api/FridgeType/3' 
from origin 'http://localhost:4200' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

这是我的 web api .net cor 2.2 中的 web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <httpProtocol>
      <customHeaders>
        <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" />
        <add name="Access-Control-Allow-Credentials" value="true" />
      </customHeaders>
    </httpProtocol>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

知道是什么原因导致上述错误吗?

标签: asp.net-core

解决方案


我从ASP.NET Core DOC那里得到了一个解释,R. Richards 也提到了它作为评论

浏览器安全性可防止网页向与提供该网页的域不同的域发出请求。这种限制称为同源策略。同源策略可防止恶意站点从另一个站点读取敏感数据。有时,您可能希望允许其他网站向您的应用发出跨域请求。有关详细信息,请参阅Mozilla CORS 文章

我能够通过使用来修复它

app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());

在类似下面的代码的Configure方法中。Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
     if (env.IsDevelopment())
     {
          app.UseDeveloperExceptionPage();
     }
     else
     {
         app.UseHsts();
     }

     app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
     app.UseHttpsRedirection();
     app.UseMvc();
}

推荐阅读