我正在尝试为我的.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]
答案 0 :(得分:7)
是的,Web API CORS为这种场景提供了扩展点。您可以在以下Web API功能规范文档中查看名为“实现自定义ICorsPolicyProvider ”的部分以获取更多详细信息。