被 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”标头包含多个值“*、*”,但只允许一个的主要内容,如果未能解决你的问题,请参考以下文章