Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 21428|Odpowiedź: 1

[WebAPI] Problemy i rozwiązania wywołań międzydomenowych AJAX do usług ASP.NET MVC lub WebAPI

[Skopiuj link]
Opublikowano 01.12.2015 15:20:20 | | | |
Opis problemu
Gdy połączenie międzydomenowe ASP.NET MVC lub usługa napisana ASP.NET API web, staje się niedostępna.
Metoda rozmnażania
  • Użyj szablonu, aby stworzyć najprostszy projekt API ASP.NET Web, debuguj go, aby upewnić się, że działa
  • Stwórz kolejny projekt z jedną stroną HTML i wykonaj wywołanie AJAX
  • Otwórz tę stronę w swojej przeglądarce, a znajdziesz następujący błąd (405: Metoda niedozwolona)

    Uwaga: Podobna sytuacja ma miejsce w ASP.NET wypadku samochodowym. W niektórych przypadkach MVC może być również bezpośrednio wykorzystywane do tworzenia usług, co ma swoje zalety i wady w porównaniu do WebAPI. Poniżej znajduje się przykład usługi opracowanej przy użyciu MVC


Analiza przyczyn
Podstawowym powodem problemu międzydomenowego jest to, że przeglądarka ma niskie uprawnienia dla obu żądań i zazwyczaj pozwala na wywołania tylko do zasobów w domenie lokalnej, chyba że serwer docelowy wyraźnie informuje ją o dozwolonych połączeniach międzydomenowych.
Dlatego, chociaż problem międzydomenowy jest spowodowany zachowaniem przeglądarki, rozwiązanie znajduje się po stronie serwera. Ponieważ nie jest możliwe, aby wszyscy klienci obniżali poziom bezpieczeństwa.

rozwiązanie
Zarówno dla ASP.NET MVC, jak i ASP.NET projektów Web API, przeprowadziłem trochę badań i uznałem, że następujący scenariusz jest wykonalny.
Dla ASP.NET MVC wystarczy dodać poniższą zawartość do web.config


Dla ASP.NET Web API, oprócz powyższych ustawień, należy dodać specjalny projekt, czyli dodać metodę OPTIONS dla każdego kontrolera API, ale bez zwracania czegokolwiek.
public string Options()
{
return null; Odpowiedź HTTP 200 z pustą treścią
}

Uwaga: tę funkcję można również zrealizować po pewnym researchu i może lepiej zaprojektować ją jako filtr.





Poprzedni:Oficjalny cytat z notesu kanału Lenovo z 1 grudnia
Następny:Implementuj prostą usługę Http za pomocą HttpListener
 Ziemianin| Opublikowano 01.12.2015 15:39:52 |
  1. <system.webServer>

  2. <httpProtocol>

  3. <customHeaders>

  4. <add name="Access-Control-Allow-Origin" value="*" />

  5. <add name="Access-Control-Allow-Headers" value="Content-Type" />

  6. <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

  7. </customHeaders>

  8. </httpProtocol>

  9. <handlers>

  10. <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

  11. <remove name="OPTIONSVerbHandler" />

  12. <remove name="TRACEVerbHandler" />

  13. <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

  14. </handlers>

  15. </system.webServer>
Skopiuj kod


Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com