2013-10-03 20 views
6

Próbuję połączyć się z domeną usługi sieci Web z poziomu widgetu HTML. To chyba nie działa. Udało się świetnie w tej samej domenie. Próbuję utworzyć stronę logowania w Orchard, która może być używana do logowania się do mojego oprogramowania w innej domenie. Usługa sieciowa sprawdza poprawność danych uwierzytelniających użytkownika i zwraca wartość logiczną, która następnie generuje uwierzytelnianie użytkowników.Sposób obsługi wywołań usługi WWW w wielu domenach z JS w Orchard CMS

Przeczytałem, że mógłbym skorzystać z Handler'a HTTP lub innej usługi sieciowej (po stronie Orchard), aby zadzwonić do usługi internetowej w innej domenie, ale nie jestem dostatecznie zaznajomiony z MVC lub Orchard, aby to zrobić. Jak mogę dodać jedną z nich do mojej aplikacji internetowej Orchard?

Odpowiedz

11

Wywołania międzydomenowe z poziomu kodu po stronie klienta są nie-nie we wszystkich głównych przeglądarkach. Można

  1. Zastosowanie CORS, tj. ustawić Access-Control-Allow-Origin nagłówek http://your-caller-domain.com w odpowiedzi usługi sieci web, aby wnioski pochodzące od swojej stronie domenie
  2. Korzystanie JSONP technika
  3. Tworzenie niestandardowego proxy API wewnątrz aplikacji (za pomocą zwykłego ASP.NET MVC controller lub WebAPI jeden), które należy wykonać zadzwoń po stronie serwera, używając klasy WebClient i zwróć odpowiedź.

Opcje są zamawiane od najlepszych do najgorszych. CORS jest obsługiwany przez większość przeglądarek, z wyjątkiem IE8/9 (które mają częściową obsługę przez XDomainRequest) i starszych. Istnieją jednak rozwiązania tego problemu.

Pamiętaj, że pierwsze dwa dotyczą zmian po stronie usługi sieciowej - jeśli nie możesz tego zrobić, opcja 3. jest jedyną pozostawioną.

+1

Uwaga: CORS ma częściowe wsparcie w IE8/9 przez 'XDomainRequest'. –

+0

@RayNicholus Tak, dlatego wspomniałem, że istnieją obejścia. Dziękuję za wyraźne wskazanie tego - odpowiednio zaktualizowałem odpowiedź. –