被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个

Posted

技术标签:

【中文标题】被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个【英文标题】:been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed 【发布时间】:2019-10-02 13:12:06 【问题描述】:

我有一个使用 .net core 2.2 的登录 API,它突然返回了这个错误: 从源“https://domain”访问“https://hostname/users/authenticate”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头包含多个值 '*, *',但只允许一个。

起初我得到了这个错误: 请求的资源上不存在“Access-Control-Allow-Origin”标头。

然后在 web.config 我把 "add name="Access-Control-Allow-Origin" value="*" " 像下面的完整代码:

然后我遇到了一个新错误,我在这篇文章中询问过“标头包含多个值 '*、*',但只允许一个值。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <directoryBrowse enabled="true" />
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS"/>
          <add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Accept"/>
          <add name="Access-Control-Allow-Credentials" value="true" />
        </customHeaders>
      </httpProtocol>
      <rewrite>
        <rules>
          <rule name="Https ApiLogin Page"  stopProcessing="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAny">
              <add input="SERVER_PORT_SECURE" pattern="^0$" />
            </conditions>
            <action type="Redirect" url="https://HTTP_HOSTREQUEST_URI" redirectType="Permanent" />
          </rule>
        </rules>
      </rewrite>
      <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDavModule" />
      </modules>
      <handlers>
        <remove name="OPTIONSVerbHandler" />
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>

这是我的:header Request 这是我的:Startup.cs

我需要做什么来修复“标题包含多个值'*,*',但只允许一个。”

【问题讨论】:

修复"header包含多个值'*,*',但只允许一个"错误,需要修复您的请求的标头。可以展示一下吗? 你是这个意思吗? link 【参考方案1】:

你必须在你的 api 中添加核心策略

把它放在你的控制器上

[EnableCors("SiteCorsPolicy")]

这在你的 StartUp.cs 中

services.AddAuthorization(opts =>
        
            opts.AddPolicy(
          name: ConstantPolicies.DynamicPermission,
          configurePolicy: policy =>
          
              policy.RequireAuthenticatedUser();
              policy.Requirements.Add(new DynamicPermissionRequirement());
          );
        );

【讨论】:

我把控制器放在上面,在 Startup.cs 中的位置? 在 ConfigureServices 方法中。你的启动似乎没问题。你收到这个错误了吗? 我不明白为什么,我尝试了很多我建议的东西,但仍然存在问题,我确定我错过了一些东西:( 撤消您的 web.config 并再次测试 我也试过了,当 del from web.config 只剩下 Startup.cs 中的代码我得到了第一个 错误:No 'Access-请求的资源上存在 Control-Allow-Origin' 标头

以上是关于被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个的主要内容,如果未能解决你的问题,请参考以下文章

请求被 CORS 策略阻止

quarkus:被 CORS 策略阻止

Angular AWS 被 CORS 策略阻止

S3 被 CORS 策略阻止

http 请求被 Flutter Web 的 Cors 策略阻止

XMLHttpRequest 被 CORS 策略阻止