|
Descrierea problemei Când un apel cross-domain ASP.NET MVC sau un serviciu scris ASP.NET Web API, acesta devine inaccesibil. Metoda de reproducere - Folosește un șablon pentru a crea cel mai simplu proiect ASP.NET Web API, depanează-l ca să te asiguri că funcționează
- Creează un alt proiect cu o singură pagină HTML și fă un apel AJAX
- Deschide această pagină în browserul tău și vei găsi următoarea eroare (405: Metoda nu este permisă)
Notă: Aceeași situație apare și în ASP.NET MVC. În unele cazuri, MVC poate fi folosit direct și pentru dezvoltarea serviciilor, ceea ce are avantaje și dezavantaje față de WebAPI. Mai jos este un exemplu de serviciu dezvoltat folosind MVC
Analiza cauzei Motivul fundamental al problemei cross-domain este că browserul are privilegii scăzute la ambele cereri și permite de obicei apeluri doar către resurse din domeniul local, cu excepția cazului în care serverul țintă îi spune explicit că apelurile cross-domain sunt permise. Prin urmare, deși problema cross-domain este cauzată de comportamentul browserului, soluția se află pe partea de server. Pentru că nu este posibil ca toți clienții să reducă securitatea.
soluție Pentru ambele tipuri de proiecte ASP.NET MVC și ASP.NET Web API, am făcut niște cercetări și am stabilit că următorul scenariu este fezabil. Pentru ASP.NET MVC, trebuie doar să adaugi următorul conținut în web.config
Pentru API-urile web ASP.NET, pe lângă setările de mai sus, trebuie adăugat un design special, care este să adauge o metodă OPTIONS pentru fiecare controler API, dar fără a returna nimic. Opțiuni pentru șiruri publice() { returnează nul; Răspuns HTTP 200 cu corp gol }
Notă: Această funcție poate fi realizată și cu puțină cercetare și poate fi mai bine să o proiectezi ca un filtru.
|