我正在尝试在我的 .Net Web API 应用程序中为某些域启用 CORS,并且能够通过此代码在 Application Start 上执行此操作..
public static void Register(HttpConfiguration config)
{
//below comma separated string is built from database
var domains = "http://www.myfirstdomain.com,http://www.myseconddomain.co.uk .... about 130 domains more..";
config.EnableCors(new EnableCorsAttribute(domains, "*", "*"));
但是,如果在应用程序运行时添加了新域,则在应用程序池被回收并再次建立此列表之前,这些将不允许跨域发布。
有什么方法可以在我的应用程序生命周期内更新此列表?我知道我可以定期回收应用程序池,但这会导致一些我理想情况下可以不做的请求延迟。
我知道我可以在控制器方法上启用它,即..
[EnableCors("http://domain1.com,http://domain2.com", "*", "*")]
public HttpResponseMessage PostAsync([FromBody] MyRequest myRequest)
{
然而,逗号分隔的参数必须声明为常量,因此不能是动态的。
我是否遗漏了一些明显的东西,或者任何人都可以想到一种体面的方式来做到这一点?
编辑
这是我编写自己的自定义 EnableCors 属性的尝试。
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
public class EnableCorsByDomainAttribute : Attribute, ICorsPolicyProvider
{
private readonly CorsPolicy _policy;
public EnableCorsByDomainAttribute()
{
_policy = new CorsPolicy
{
AllowAnyMethod = true,
AllowAnyHeader = true
};
var originsString = "http://www.test1.com,http://www.test2.com";
if (!String.IsNullOrEmpty(originsString))
{
foreach (var origin in originsString.Split(','))
{
_policy.Origins.Add(origin);
}
}
}
public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return Task.FromResult(_policy);
}
}
然后我用
[EnableCorsByDomain]