我正在尝试为我的.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)
- {
但是,逗号分隔参数必须再次声明为常量,因此不能是动态的.
我是否遗漏了一些明显的或者是否有人想到这样做的好方法?
编辑
- [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]