W moim web.config chciałbym określić więcej niż jedną domenę dla access-control-allow-origin
dyrektywy. Nie chcę używać *
. Wypróbowałem tę składnię:
<add name="Access-Control-Allow-Origin" value="http://localhost:1506, http://localhost:1502" />
ten
<add name="Access-Control-Allow-Origin" value="http://localhost:1506 http://localhost:1502" />
ten
<add name="Access-Control-Allow-Origin" value="http://localhost:1506; http://localhost:1502" />
i ten
<add name="Access-Control-Allow-Origin" value="http://localhost:1506" />
<add name="Access-Control-Allow-Origin" value="http://localhost:1502" />
ale żaden z nich nie działa. Jaka jest prawidłowa składnia?
asp.net
iis
cors
web-config
Sam
źródło
źródło
*
wartość, która umożliwia dowolnemu źródłu dostęp do zasobu. Jednak pierwotne pytanie dotyczyło umieszczenia zestawu domen na białej liście.W przypadku usług IIS 7.5+ i Rewrite 2.0 można użyć:
Wyjaśnienie
RESPONSE_Access_Control_Allow_Origin
części zmiennej serwera :W Rewrite możesz użyć dowolnego ciągu po
RESPONSE_
i utworzy on nagłówek odpowiedzi, używając reszty słowa jako nazwy nagłówka (w tym przypadku Access-Control-Allow-Origin). Rewrite używa podkreślenia „_” zamiast myślników „-” (rewrite konwertuje je na myślniki)Wyjaśnienie zmiennej serwera
HTTP_ORIGIN
:Podobnie, w Rewrite możesz pobrać dowolny nagłówek żądania, używając
HTTP_
jako prefiksu. Te same zasady z myślnikami (użyj podkreślenia „_” zamiast myślników „-”).źródło
(http(s)?:\/\/((.+\.)?(domain1|domain2)\.(com|org|net)))
. W ten sposób możesz dość łatwo dodawać inne domeny i obsługiwać wiele domen najwyższego poziomu (np. Com, org, net itp.).W interfejsie Web.API ten atrybut można dodać
Microsoft.AspNet.WebApi.Cors
zgodnie z opisem podanym na stronie http://www.asp.net/web-api/overview/security/eniring-cross-origin-requests-in-web-apiW MVC możesz utworzyć atrybut filtru, aby wykonać tę pracę za Ciebie:
Następnie włącz go dla określonych akcji / kontrolerów:
Lub dodaj go dla wszystkich kontrolerów w Global.asax.cs
źródło
Po przeczytaniu wszystkich odpowiedzi i wypróbowaniu ich, żadna z nich mi nie pomogła. Podczas wyszukiwania w innym miejscu odkryłem, że możesz utworzyć atrybut niestandardowy, który możesz następnie dodać do kontrolera. Zastępuje EnableCors i dodaje do niego domeny z białej listy.
To rozwiązanie działa dobrze, ponieważ umożliwia umieszczenie domen z białej listy w webconfig (appsettings) zamiast kodowania ich w atrybucie EnableCors na kontrolerze.
Znalazłem ten przewodnik online i działał jak marzenie:
http://jnye.co/Posts/2032/dynamic-cors-origins-from-appsettings-using-web-api-2-2-cross-origin-support
Pomyślałem, że zostawię to tutaj dla każdego w potrzebie.
źródło
Udało mi się rozwiązać ten problem w kodzie obsługi wniosków zgodnie z radą „monsur”.
źródło
W przypadku usług IIS 7.5+ można użyć modułu IIS CORS: https://www.iis.net/downloads/microsoft/iis-cors-module
Twój plik web.config powinien wyglądać mniej więcej tak:
Informacje o konfiguracji można znaleźć tutaj: https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference
źródło
Zajrzyj do biblioteki Thinktecture IdentityModel - ma pełną obsługę CORS:
http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/
I może dynamicznie emitować żądane źródło ACA.
źródło
Możesz dodać ten kod do projektu webapi asp.net
w pliku Global.asax
źródło
Możesz użyć własnego oprogramowania pośredniczącego, aby zdefiniować zasady cors, w których można zdefiniować wiele źródeł cors
źródło
Potrzebujesz tylko:
<add name="Access-Control-Allow-Origin" value="*" />
z pliku web.config.potem dodaj to w
Application_BeginRequest
metodzie Global.asax:Mam nadzieję, że to pomoże. to działa dla mnie.
źródło