Как расширение предложения Marc, я хотел бы предложить следующее решение, которое также позволит манипулировать словарем во время выполнения:
public class DictionaryBindingList<TKey, TValue> : BindingList<KeyValuePair<TKey, TValue>>
{
public readonly IDictionary<TKey, TValue> Dictionary;
public DictionaryBindingList()
{
Dictionary = new Dictionary<TKey, TValue>();
}
public void Add(TKey key, TValue value)
{
base.Add(new KeyValuePair<TKey, TValue>(key, value));
}
public void Remove(TKey key)
{
var item = this.First(x => x.Key.Equals(key));
base.Remove(item);
}
protected override void InsertItem(int index, KeyValuePair<TKey, TValue> item)
{
Dictionary.Add(item.Key, item.Value);
base.InsertItem(index, item);
}
protected override void RemoveItem(int index)
{
Dictionary.Remove(this[index].Key);
base.RemoveItem(index);
}
public int IndexOf(TKey key)
{
var item = this.FirstOrDefault(x => x.Key.Equals(key));
return item.Equals(null) ? -1 : base.IndexOf(item);
}
}
Похоже, что рекомендуемый способ сделать это - попросить ваш сервер прочитать заголовок Origin от клиента, сравнить его со списком доменов, которые вы хотите разрешить, и, если он совпадает, отобразить значение заголовка Origin
возвращается клиенту в качестве заголовка Access-Control-Allow-Origin
в ответе.
С помощью .htaccess
вы можете сделай это так:
# ----------------------------------------------------------------------
# Allow loading of external fonts
# ----------------------------------------------------------------------
<FilesMatch "\.(ttf|otf|eot|woff|woff2)$">
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.example|dev02.otherdomain.example)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header merge Vary Origin
</IfModule>
</FilesMatch>
Есть один недостаток, о котором вы должны знать: Как только вы передадите файлы на CDN (или любой другой сервер, который не разрешает скриптинг) или если ваши файлы будут кэшироваться на прокси, изменение ответа на основе заголовка запроса 'Origin' не будет работать.