asp.net – 有没有办法动态更新Web API CORS中允许的来源列表

前端之家收集整理的这篇文章主要介绍了asp.net – 有没有办法动态更新Web API CORS中允许的来源列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为我的.Net Web API应用程序中的某些域启用CORS,并且能够通过此代码在Application Start上执行此操作.
  1. public static void Register(HttpConfiguration config)
  2. {
  3. //below comma separated string is built from database
  4. var domains = "http://www.myfirstdomain.com,http://www.myseconddomain.co.uk .... about 130 domains more..";
  5. config.EnableCors(new EnableCorsAttribute(domains,"*","*"));

但是,如果在应用程序处于活动状态时添加了新域,则在回收应用程序池并再次构建此列表之前,将不允许这些域发布.

有没有什么办法可以在我的应用程序生命周期内更新此列表?我知道我可以定期回收应用程序池,但这会导致某些请求出现延迟,理想情况下这些请求可能没有.

我知道我可以在控制器方法上启用它,即..

  1. [EnableCors("http://domain1.com,http://domain2.com","*")]
  2. public HttpResponseMessage PostAsync([FromBody] MyRequest myRequest)
  3. {

但是,逗号分隔参数必须再次声明为常量,因此不能是动态的.

我是否遗漏了一些明显的或者是否有人想到这样做的好方法

编辑

这是我尝试编写自己的自定义EnableCors属性.

  1. [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,AllowMultiple = false)]
  2. public class EnableCorsByDomainAttribute : Attribute,ICorsPolicyProvider
  3. {
  4. private readonly CorsPolicy _policy;
  5.  
  6. public EnableCorsByDomainAttribute()
  7. {
  8. _policy = new CorsPolicy
  9. {
  10. AllowAnyMethod = true,AllowAnyHeader = true
  11. };
  12.  
  13. var originsString = "http://www.test1.com,http://www.test2.com";
  14. if (!String.IsNullOrEmpty(originsString))
  15. {
  16. foreach (var origin in originsString.Split(','))
  17. {
  18. _policy.Origins.Add(origin);
  19. }
  20. }
  21. }
  22.  
  23. public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request,CancellationToken cancellationToken)
  24. {
  25. return Task.FromResult(_policy);
  26. }
  27. }

然后我用控制器方法装饰了

  1. [EnableCorsByDomain]

解决方法

是的,Web API CORS为这种场景提供了可扩展性点.您可以在以下Web API功能规范文档中查看名为“实现自定义ICorsPolicyProvider”的部分以获取更多详细信息.

http://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API&referringTitle=Specs

猜你在找的asp.Net相关文章