Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 21428|Risposta: 1

[WebAPI] Problemi e soluzioni per le chiamate AJAX cross-domain a ASP.NET servizi MVC o WebAPI

[Copiato link]
Pubblicato su 01/12/2015 15:20:20 | | | |
Descrizione del problema
Quando una chiamata cross-domain ASP.NET MVC o un servizio scritto ASP.NET Web API, diventa inaccessibile.
Metodo di riproduzione
  • Usa un template per creare il progetto Web API più semplice ASP.NET, debuggalo per assicurarti che funzioni
  • Crea un altro progetto con una sola pagina HTML e effettua una chiamata AJAX
  • Apri questa pagina nel tuo browser e troverai il seguente errore (405: Metodo non permesso)

    Nota: La stessa situazione si verifica in ASP.NET MVC. In alcuni casi, MVC può anche essere utilizzato direttamente per sviluppare servizi, il che presenta vantaggi e svantaggi rispetto a WebAPI. Di seguito è riportato un esempio di un servizio sviluppato utilizzando MVC


Analisi della causa
La ragione fondamentale del problema cross-domain è che il browser ha bassi privilegi su entrambe le richieste e di solito consente solo chiamate a risorse nel dominio locale, a meno che il server target non gli dica esplicitamente che le chiamate cross-domain sono permesse.
Pertanto, sebbene il problema cross-domain sia causato dal comportamento del browser, la soluzione si trova lato server. Perché non è possibile richiedere a tutti i clienti di ridurre la sicurezza.

soluzione
Per entrambi i tipi di progetti ASP.NET MVC e ASP.NET Web API, ho fatto alcune ricerche e ho determinato che il seguente scenario è fattibile.
Per ASP.NET MVC, basta aggiungere il seguente contenuto al web.config


Per ASP.NET Web API, oltre alle impostazioni sopra, è necessario aggiungere un design speciale, che consiste nell'aggiungere un metodo OPTIONS per ogni API Controller, ma senza restituire nulla.
Opzioni stringa pubblica()
{
return null; Risposta HTTP 200 con corpo vuoto
}

Nota: questa funzione può essere realizzata anche con qualche ricerca, e potrebbe essere meglio progettarla come un filtro.





Precedente:Citazione ufficiale del quaderno del canale Lenovo il 1° dicembre
Prossimo:Implementa un semplice servizio Http con HttpListener
 Padrone di casa| Pubblicato su 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>
Copia codice


Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com