我确定这是重复的,但我发现的答案似乎都无效。
我有一个web.api作为Windows服务托管,我需要允许CORS到两个特定的来源。
我的startup.cs中有这个
config.EnableCors(
new EnableCorsAttribute("http://customer.mydomain.com,
http://admin.mydomain.com", "*", "*")
);
var policy = new CorsPolicy()
{
AllowAnyHeader = true,
AllowAnyMethod = true,
SupportsCredentials = true
};
policy.Origins.Add("*http://customer.mydomain.com");
policy.Origins.Add("*http://admin.mydomain.com");
app.UseCors(new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context => Task.FromResult(policy)
}
});
所以我在这里的理解是,我将只允许从管理员和客户子域访问我的服务?
然后在我的控制器顶部
[EnableCors("*.mydomain.com","*","*")]
public class MasterDataController
一切都建立并且很高兴,但是当我运行我的服务并直接从浏览器URL调用控制器中的方法时,它会很好地响应,这是否应该阻止了我,因为我没有从mydomain.com调用它? / p>
我已经看到回答,说我需要在呼叫中发送始发地,但是肯定不是答案,因为我特别想停止呼叫,除非它们来自允许的起源?我觉得我在这里转圈
[更新] 我还添加了
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*.bizcash.co.za" />
</customHeaders>
到我的IIS代理,如果我在直接调用该方法时检查响应标头,则会看到以下内容
* .reded显然是我的域名。但是,我仍然可以直接从浏览器中调用它,并且不应该这样吗?它应该只允许从我的域拨打电话吗?
答案 0 :(得分:0)
好的,所以有两个问题。
添加特定的CORS来源并不会阻止您直接在浏览器中调用该服务,而是会阻止其他Web应用程序对其进行调用。所以我测试错了。
因此,您需要进行更改,将其部署到服务器上,然后通过常规应用程序对其进行测试。
要使其正常工作,这就是我最终要拥有的
var policy = new CorsPolicy()
{
AllowAnyHeader = true,
AllowAnyMethod = true
};
policy.Origins.Add("https://customer.mydomain.com");
policy.Origins.Add("https://admin.mydomain.com");
app.UseCors(new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context => Task.FromResult(policy)
}
});
就是这样,仅在startup.cs中就可以了。希望我可以挽救别人浪费生命的两天