希望允许从不同的网站访问我的API。为此:
services
.AddCors(options =>
{
options.AddPolicy(PolicyName, builder =>
{
builder
.SetIsOriginAllowedToAllowWildcardSubdomains()
.WithOrigins(
"http://*.my-api.com",
"http://*.my-api.service"
)
...
这似乎不允许httpS或我在请求中指定端口。
例: rename
思想可以用SetIsOriginAllowed()
替换WithOriginsservices
.AddCors(options =>
{
options.AddPolicy(PolicyName, builder =>
{
builder
.SetIsOriginAllowed(IsOriginAllowed)
其中IsOriginAllowed函数定义为:
private static bool IsOriginAllowed(string host)
{
var corsOriginAllowed = new[] { "my-api.com", "my-api.service" };
return corsOriginAllowed.Any(origin =>
Regex.IsMatch(host, $@"^http(s)?://.*{origin}(:[0-9]+)?$", RegexOptions.IgnoreCase));
}
但这根本不起作用,即使正则表达式在我想要的时候返回true。
有谁知道为什么这不起作用,并且可以向我展示允许httpS的正确方法(除了使用httpS和不同的端口复制WithOrigins()中的所有域。
由于
答案 0 :(得分:1)
SetIsOriginAllowed()确实有效。正在使用Postman进行测试,并且正如所述,Postman并不关心从服务器返回的标头。它是强制执行Cors标头的浏览器。
使用以下javascript
测试在测试网站下正确创建一个小html页面
<html>
<script>
fetch('http://test.com:5000/v2/campaign/hallo3').then(function(response) {
return response.json();
}).then(function(j) {
alert(JSON.stringify(j));
});
</script>
</html>
&#13;
当域名未包含在Cors允许列表浏览器中时,不显示API返回的值
将测试域添加到允许的域列表浏览器后显示数据并获取内容Cors头
另一个问题是,只有SetIsOriginAllowed()服务器没有发送&#39; Vary&#39;头。不得不同时设置:
.SetIsOriginAllowed(IsOriginAllowed)
.WithOrigins(corsOriginAllowed)