是否可以动态更新Cors Policy(OWIN管道)

时间:2016-05-12 00:43:13

标签: c# cors asp.net-web-api2 owin

美好的一天,是否可以在OWIN中动态更新CORS策略?我现在设置CORS策略的方案是在启动期间。

    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {   
            //here is the part where I update the CORS policy
            ConfigureCors(app);
            ConfigureAuth(app);
        }
    }

    public partial class Startup
    {
        /// <summary>
        /// Cors Policy
        /// </summary>
        /// <returns></returns>
        public void ConfigureCors(IAppBuilder app)
        {
            app.UseCors(new CorsOptions
            {
                PolicyProvider = new AuthCorsPolicy()
            });
        }

        /// <summary>
        /// Auth Cors Policy
        /// </summary>
        public class AuthCorsPolicy : ICorsPolicyProvider
        {
            //This method will get all the apps url in the database and add it in CORS and will only allow those url to connect to auth
            public Task<CorsPolicy> GetCorsPolicyAsync(IOwinRequest request)
            {
                var policy = new CorsPolicy
                {
                    AllowAnyMethod = true, 
                    AllowAnyHeader = true
                };
                var dbContext = WebApiApplication.Container.Resolve<IAuthDbContext>();

                var urls = dbContext.Apps.Select(x => x.Url).Distinct().ToList();

                foreach (var url in urls)
                {
                    policy.Origins.Add(url);
                }

                return Task.FromResult(policy);
            }
        }

        /// <summary>
        /// Get Cors
        /// </summary>
        /// <returns></returns>
        public Task<CorsPolicy> GetCors()
        {
            var policy = new CorsPolicy();

            var dbContext = WebApiApplication.Container.Resolve<IAuthDbContext>();

            var apps = dbContext.Apps.Select(x => x.Url).Distinct().ToList();

            foreach (var app in apps)
            {
                policy.Origins.Add(app);
            }

            return Task.FromResult(policy);
        }
    }

如您所见,我从dbContext获取了所有url。我现在面临的情况是可以更新dbContext.Apps中的Url。有没有办法我还可以更新CORS策略而无需重启服务器?谢谢你,美好的一天。

0 个答案:

没有答案